操作系统概述


操作系统的目标和功能

1、目标:作为用户/计算机接口

​ 计算机的使用人群大致可以分为三类,终端用户,程序开发者,操作系统设计人员。

对于终端用户,即应用程序的用户来说,他们通常不关注计算机程序的组成和计算机的硬件细节,因此在终端用户看来,计算机系统是一组应用程序的组合。终端用户需要学习的只是各种应用程序的使用。

对于程序开发者来说,计算机系统是由各种程序设计语言和系统调用接口组成。程序开发者可以选择一种程序设计语言去开发应用程序。而应用程序的执行脱离不了硬件的支持,如果程序开发者在开发应用时还需要考虑硬件的操作,控制细节,那么对于他们来说开发应用程序无疑是一件极为复杂的工作,而且效率也很低下。为了简化这种开发的难度,需要提供一些系统程序来实现对硬件的操作如 I/O 设备操作,文件管理等。操作系统正是这类程序,它为程序开发者提供了一系列的系统调用接口,向程序开发者屏蔽了硬件的细节,使他们更加容易的使用这些功能和服务。

而对于操作系统设计人员,计算机系统是一个复杂的监控,管理类的程序,计算机系统的主要目标是作为程序开发者和硬件实现之间的中间层。向上为程序开发者提供易用的系统调用接口,向下通过低级语言实现对底层硬件的操作和控制。

2、目标:作为资源管理器

​ 一台计算机就是一组(硬件)资源,这些资源用于对数据的移动、储存、和处理,以及对这些功能的控制。操作系统负责管理这些资源(对硬件的操控)。通常我们把具有控制能力的操作系统想象成在被控制对象(应用程序)之外或者至少与被控制对象有一些差别和距离。但是事实却不然。实际的情况是,

操作系统与普通的计算机软件相同,他也是由处理器执行的一段程序或一组程序。

操作系统也是一段可以被处理器执行的指令序列,它与应用程序的主要区别是二者的意图不同。操作系统控制处理器使用其他系统资源,并控制其他程序的执行时机。因此操作系统经常会释放控制,而且必须依赖处理器才能恢复控制(之后进一步讨论如何释放和恢复)。

3、功能

​ 简要的说,操作系统通常提供了一下几个方面的服务和功能:

  • 程序开发:操作系统提供各种各样的工具比如 编译器,编辑器 和 调试器等,用于帮助程序员开发程序。

  • 程序运行:运行一个程序需要很多步骤,包括必须把 指令 和 数据 加载到内存、初始化 I/O 设备和文件,准备一些资源,操作系统负责这些工作。(没有操作系统时这些都需要程序员来实现)

  • 文件的访问和控制

  • 系统访问:对共享资源和授权资源的访问控制,同时还必须解决资源竞争时的冲突问题。

  • 错误检测和响应:计算机系统运行时可能发生各种错误,包括硬件错误,软件错误。对于每种错误操作系统必须能对每种错误提供响应并清除错误条件,使其对正在运行的程序的影响降到最小。响应可以是终止引起错误的的程序、重试操作或简单的给应用程序报告错误信息。

  • 记账:统计收集对各种资源的使用信息。用于预测和优化性能。

操作系统的发展

1、串行处理

​ 对于早期没有操作系统的计算机,程序员都是直接和硬件打交道,程序的输入使用编有机器码的打孔的纸带,输出通过控制台的指示灯和打印机显示。在这个时期,现在的操作系统是以人工的形式进行的。当我们要运行一个程序,首先需要估计程序将要运行的时间,然后在计算机装置上的一个硬拷贝的登记表预定机器时间,这个时间一旦登记后就不可更改,如果程序运行时间估计过长,那么即便程序结束,计算机仍不能被使用。如果时间过短,那么程序将被强制停止。另外,如果我们需要在执行的源程序中加载和链接公用函数或者是高级语言的编译器,那么还可能将涉及到磁带和卡片组的拆卸和更换,而这些都是由人工来完成的,不仅很易出错,而且效率非常低下。所以基于人工操作的串行处理其实是比较糟糕的。

2、简单的批处理系统

​ 为了提高计算机的利用率,人们有了开发批处理操作系统的想法。批处理系统不再像串行处理中每次需要人工的切换,调度程序,而是将多个程序作为一个批次一同处理,程序的切换和时间安排由批处理系统处理。单单这一项将人工的操作更改为电子的操作就极大地提高了计算机的利用率。

简单批处理系统的中心思想使用一个称作监控程序的软件。这个程序可以监控用户程序的执行,每当有用户程序执行结束时,控制就返回到监控程序,同时监控程序自动加载下一个程序。(用计算机程序实现了计算机程序更换装载的自动化:))

为了实现监控程序对事件执行顺序的控制,大部分监控程序必须总是处于内存中,并且可以执行。这部分称作__常驻监控程序__。

从处理器角度来说,监控程序和用户程序的切换是通过分支指令来实现的。通过分支指令可以让处理器从监控程序代码段起始地址开始取址执行,也可以从用户程序代码段处开始。

可以看出,监控程序或者说批处理操作系统,只是一个简单的计算机程序。它依赖于处理器可以从内存的不同部分取指令的能力,以交替的获取或释放控制权。此外,还有其他的 硬件 功能:

  • 内存保护:当用户程序正在运行时不能改变监控程序的内存区域。如果发生这种情况,处理器将发现错误,并停止这个程序,加载下一个用户程序。
  • 定时器:用于防止一个用户程序长时间独占计算机。在每个程序开始时设定定时器,如果时间到了,用户进程被停止,控制返回监控程序。
  • 特权指令:只能由监控程序执行的指令,如果用户程序执行了这些指令,将引发一个错误。如果用户需要执行特权指令的操作,那么必须请求监控程序为自己执行这个操作。
  • 中断:为不同的程序的交替执行提供了可能。

内存保护和特权指令引入的同时也产生了一个新的概念——操作模式。即 用户态 和 内核态。

3、多道程序设计批处理系统

在批处理系统的使用中,人们发现由于 CPU 和 I/O 速度的严重不匹配使得整个__计算机性能__很差。考虑这样一种情况,当一个程序发出 I/O 请求后,由于批处理系统每次处理一个程序,所以此时处理器保持空闲等待 I/O 结束后再继续执行指令。CPU 等待 I/O 的过程与 CPU 的执行指令的速度相比是非常慢的,实例证明计算机可能在 90% 的时间都在等待 I/O 的操作结束。这种每次必须等到一个程序结束才能继续下一个程序的运行的计算机系统被称为 单道程序设计系统

这种低效在当时的技术层面上是可以避免的(使用中断)。解决办法就是使用 多道程序设计批处理系统。针对于单道程序设计批处理系统的低效问题,多道批处理系统提供了解决办法。

在多道批处理系统中,当一个用户程序有涉及到 I/O 请求时,CPU 不选择空闲等待,而是转而去执行另一个或多个可执行的用户程序,并可能在他们当中不断的切换,而当等待 I/O 的程序 I/O 结束后,CPU 再次返回这个程序继续执行。显而易见,这种设计方法有效的利用了程序在执行 I/O 期间 CPU 空闲的时间,尽量的保证了 CPU 的利用率,从而提高了计算机的整体利用率。和简单的批处理系统一样,多道批处理系统也需要依赖一些硬件的功能,支持 I/O 中断 和 直接存储器访问(DMA)是最为显著的硬件功能。通过中断驱动的 I/O 或 DMA ,当一个 I/O 操作完成后,处理器被中断,控制器被传递给操作系统中的中断处理程序,然后操作系统将控制权传递给另一个程序。

多道批处理系统引入的同时,也带来了新的问题,对准备运行的多个程序,他们必须保留在内存中,这就需要 内存管理 方案,如果 CPU 等待期间多个作业都准备运行,处理器必须选择运行哪一个,这就需要某种 调度算法

4、分时系统

​ 通过使用多道批处理系统使得计算机处理一批用户程序变得更加高效。但是有时我们需要一种模式可以使用户和计算机进行交互,即多个用户程序能同时响应多个用户的请求。分时系统与多道批处理系统非常相像,不同的是分时系统用来处理交互式的任务。由于多个用户同时分享处理器的时间(处理器在多个交互类的程序之间飞快的切换),所以这种技术被称为 分时系统 (本质仍是多道批处理系统)。

而分时技术能同时实现多用户交互的原因在于,人的反应时间要远远慢于处理器在不同程序间切换的速度,每个用户进程执行一个很短的时间片,然后切换到下一个进程,从而给每个用户一种计算机在单独服务自己的假像。

其他

1、层次结构

​ 我们可以将操作系统看做是一系列的层,每一层执行操作系统所需的功能的相关子集。他依赖于下一个较低层,较低层执行更为原始的功能并隐藏这些功能的细节。他还给相邻的较高层提供服务。通常情况下,较低层的处理时间很短,操作系统的某些部分必须直接与计算机硬件进行交互,在硬件层次,事件的时间刻度为几十亿分之一秒。而在操作系统与用户交互的一端,用户发出指令的频率要小得多,可能每隔几秒中发送一次。使用层次结构可以很好的与这种频率差别场景保持一致。

2、shell

​ 为用户提供操作系统的一个界面。他之所以被称为 命令行解释器 ,是因为它将用户和操作系统细节分离开,而简单的把操作系统作为一组服务的集合提供给用户,通过用户输入命令实现对系统的控制。

3、UNIX的历史

UNIX 最初是在贝尔实验室开发的。UNIX 的设计开发参考了 MIT 的分时系统 CTSS。而随着贝尔实验室工作的展开和其他地方关于 UNIX 的工作产生了一系列 UNIX 版本。第一个著名的历程碑是把 UNIX 系统从 PDP-7 移植到 PDP-11 上,第一次暗示了UNIX 将成为所有计算机上的操作系统;下一个重要的里程碑是用 C 语言重写了UNIX ,这在当时是闻所未闻的策略。原因如下:

  • 内存小且昂贵,因此需要高效的使用内存,这就包括了不同的内存覆盖技术,如使用不同的代码段和数据段,以及自修改代码等。
  • 从 20 世纪 50 年代就开始使用编译器,但是计算机行业还是对自动生成的代码的质量持有怀疑。
  • 处理器和总线速度相对较慢,因此节省时钟周期会使得运行时间上有很大的改进。

现在,几乎所有的UNIX 都是使用 C编写的。

作者:Skipper
出处:http://www.cnblogs.com/backwords/p/9175470.html
本博客中未标明转载的文章归作者 Skipper 和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

操作系统概述(os 笔记一)的更多相关文章

  1. linux学习笔记:第二单元 UNIX和Linux操作系统概述

    第二单元 UNIX和Linux操作系统概述 UNIX是什么 UNIX操作系统的特点 UNIX 与Linux的关系 GNU项目与自由软件 GUN计划 自由软件意味着什么 Linux简介 Linux是什么 ...

  2. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  3. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  4. Flas-SQLAchemy数据库操作使用学习笔记

    Flas-SQLAchemy数据库操作使用学习笔记 Flask-SQLALchemy 是一个给你的应用添加 SQLALchemy 支持的 Flask 扩展.SQLALchemy 是Python语言的S ...

  5. 【转】Python之文件与目录操作(os、zipfile、tarfile、shutil)

    [转]Python之文件与目录操作(os.zipfile.tarfile.shutil) Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读 ...

  6. Python:目录和文件的操作模块os.path和OS常用方法

    1.目录和文件的操作模块os.path,在使用之前要先导入:import os.path.它主要有以下几个重要的功能函数: #!/user/bin/python #coding= utf-8 impo ...

  7. Python之文件与目录操作(os、zipfile、tarfile、shutil)

    Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...

  8. delphi操作xml学习笔记 之一 入门必读

    Delphi 对XML的支持---TXMLDocument类       Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写.可以利用TXMLDocum ...

  9. Python的路径操作(os模块与pathlib模块)

    Python的路径操作(os模块与pathlib模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.os.path模块(Python 3.4版本之前推荐使用该模块) #!/u ...

随机推荐

  1. sublime3 python 缩进问题

    注意,在sublime中可以选择使用空格还是tap进行缩进, 可以宰这里面进行选择: 如果选择了使用tap符进行缩进,再用空格进行缩进,就会报undinent(没有缩进的错误),也可以这样判断,如果有 ...

  2. Linux 进程中 Stop, Park, Freeze【转】

    转自:https://blog.csdn.net/yiyeguzhou100/article/details/53134743 http://kernel.meizu.com/linux-proces ...

  3. SCons: 替代 make 和 makefile 及 javac 的极好用的c、c++、java 构建工具

    http://scons.org/ https://www.ibm.com/developerworks/cn/linux/l-cn-scons/index.html 后附:另外,WAF是一个基于sc ...

  4. Mashup

    简介 mashup是糅合,是当今网络上新出现的一种网络现象,将两种以上使用公共或者私有数据库的web应用,加在一起,形成一个整合应用.一般使用源应用的API接口,或者是一些rss输出(含atom)作为 ...

  5. C++:vector的用法详解

    原文地址:http://blog.csdn.net/hancunai0017/article/details/7032383 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于 ...

  6. eclipse引入系统类库

    引入系统类库1.第一步:项目,右键,build path,remove报错的类库 2.第二步:项目,右键,build path→Add Library→JRE System Library,Next3 ...

  7. 使用FreeSWITCH做电话自动回访设置

    一.背景介绍: 目前公司在处理客户回访方面,需要人工进行电话回访,尤其是逢年过节的时候,电话问候更能体现服务的品质: 在某些公司,电话销售员需要给大批量的陌生用户打电话,如果能过滤掉不关心的用户,销售 ...

  8. gitlab代码仓库迁移

    有的时候我们需要对gitlab上的代码进行迁移,希望在迁移后能保持原有的branch.tag.commit记录等.可以使用以下方式: 1.clone代码到本地. 2.修改remote仓库的地址,添加新 ...

  9. Python-HTML CSS 练习

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. PYTHON-面向对象 类 绑定方法

    面向对象三大特性(*****) 1继承 1. 什么是继承 继承是一种新建类的方式,新建的类称之为子类/派生类,被继承的类称之为父类/基类/超类 继承与现实生活中的继承一个意思 (例如 小明继承小明他爹 ...