operating system

1. 操作系统的基本概念

1.1 操作系统的概念

计算机系统自下而上分为:硬件、操作系统、应用程序和用户。

定义:操作系统直接运行在硬件之上,是管理和控制计算机硬件与软件资源的计算机程序。任何其他软件都必须在操作系统的支持下才能运行。

汇编、编译、数据库等软件都依赖于 OS 提供的服务。

1.2 操作系统的特征

无论是多道批处理、分时、实时系统,其共性有

  1. 并发(Concurrence)

    多道用户程序可以在同一个时间间隔中运行,例如在一秒内有不止一个程序在交替着跑(注意交替),我们就说该系统具有并发性,但是在一个时间点里只有一个程序在跑。

    并行性 = 并发性 + 同时性

  2. 共享(Sharing)

    系统资源可供 内存 中多个并发的进程共同使用,例如我使用打印机,你使用磁盘。分为两种

    • 互斥共享:例如一个时间点只能有一个程序使用打印机 。
    • 同时访问:两个程序同时读一个文本并不会出现问题。
  3. 虚拟(Virtual)

    系统物理资源可虚拟为更大、更多的逻辑资源。例如

    时分复用:我将一个处理机虚拟化成两个逻辑处理机,也就是你用 0.1 秒,我用 0.1 秒,这样交替着用,你是察觉不到的,都是骗子。

    空分复用:虚拟内存,例如我的内存只有 8 G,而如果用户在跑 12 G 的程序的时候系统也照样没事,那是因为系统将磁盘的一部分当作内存来使用了,只不过要付出时间的代价,因为磁盘的读写实在太慢了。

  4. 异步(Asynchronism)

    内存中多个并发的进程以异步方式运行,也就是说没有说一定要按顺序,谁合适谁上,难道我比较晚认识你就不能追你了?并发的进程之间没有统一的同步节拍控制(除非遇到临界资源),所以多个进程不能以预想的方式先后完成,先脱单的不一定先有孩子,社会就是一个很大的操作系统。

并发和共享是操作系统两个最基本的特征。两者之间互为存在的条件是

1.3 目标及功能

操作系统的目标有如下几点,最重要的是 有效性方便性

  1. 有效性:管理资源,提升利用率/吞吐率。
  2. 方便性:提供公共服务/抽象接口。
  3. 可拓展性:适应硬件拓展和结构变化。
  4. 开放性:标准化接口

还有一些其他应用目标:实时性、可靠性和紧凑性。

计算机模型

无论是多道批处理、分时、实时系统,其主要功能都是如下四点

  1. 处理机管理

    处理机的分配和运行都是以进程(或线程)为基本单位,因此对处理机的管理可归结为对进程的管理。包括进程控制、进程同步、进程通信、死锁处理和进程调度等。

  2. 储存器管理

    为多道程序提供良好的环境,方便用户使用和提高内存的利用率。包括内存分配、地址映射、内存保护与共享、内存扩充等。

  3. 设备管理

    完成用户的 I/O 请求,方便用户使用各种设备,并提高设备的利用率。包括缓冲管理、设备分配、设备处理和虚拟设备等。

  4. 文件管理

    计算机中的信息都是以文件的形式存储的,操作系统复杂文件管理的部分称为文件系统。包括文件存储空间的管理、目录管理以及文件读写管理和权限设置等。

操作系统提供了用户与硬件系统间的接口,也就是说软件工程师不用直接和硬件打交道。接口类型有

操作系统是资源的管理者,包括处理器、内存、文件、设备。操作系统将很多设备的操作都进行了抽象,因此我们读写设备的时候感受不到设备的差异。

1.4 习题

  1. 操作系统是什么?

  2. 操作系统是对什么进行管理的软件?

  3. 操作系统的基本功能?

  4. 现代操作系统中最基本的两个特征是啥?

  5. 说说你对并发的理解。

  6. 单处理机系统中,同一时刻最多有几个进程同时运行?

  7. 用户可以通过哪些方式使用计算机?

  8. 系统调用怎么用?

  9. 操作系统提供给应用程序的接口是什么?

  10. 操作系统提供给编程人员的接口是什么?

  11. 系统调用的目的是?

  12. 命令接口可进一步分为什么?

  13. 用户在程序中试图读某个文件的第 100 个逻辑块,使用操作系统提供的什么接口?

  14. 操作系统与用户通信接口通常不包括

    A:shell B:命令解释器 C:广义指令 D:缓存管理指令

  15. 不属于多道设计程序的基本特征是

    A:制约性 B:间断性 C:顺序性 D:共享性

  16. 综合题:库函数和系统调用的区别和联系。

1.5 习题答案

  1. 系统软件
  2. 计算机资源,包括硬件资源和软件资源,注意,文件不属于硬件资源,但属于软件资源。
  3. 四大管理功能
  4. 并发和共享
  5. 一个时间段有多个进程运行
  6. 一个
  7. 命令接口和系统调用
  8. 编程的时候用
  9. 系统调用
  10. 系统调用
  11. 请求系统服务
  12. 联机命令和脱机命令
  13. 系统调用
  14. D,缓存管理对用户透明
  15. C,异步性才对
  16. 库函数是语言或应用程序的一部分,可以运行在用户空间中。而系统调用是操作系统的一部分,是内核为用户提供的程序接口,运行在内核空间中,而且许多库函数都会使用系统调用来实现功能。未使用系统调用的库函数,其执行效率通常要比系统调用的高。因为使用系统调用时,需要上下文的切换及状态的切换(由用户态转向和心态)。

2. 发展历程

操作系统一直在发展,主要有以下几个发展动力

计算机的操作系统发展历程如下

  1. 无操作系统

    一开始是人工操作方式。用户独占所有计算机资源,CPU 及内存等利用率低(用户进行装带、卸带的时候,CPU 和内存是空闲的),效率低,操作不方便,操作人员还需要很专业的计算机知识,不然玩不动。

    由于装带和卸带费时间,后面发明了外围机,在 CPU 做一个任务的时候,把另一个任务先装到一个外围设备中,CPU 工作完直接到外围机取任务。这就是脱机输入输出方式。

  2. 单道批处理

    这时候计算机中多了一个监督程序,当 CPU 做完当前作业,控制权就交给监督程序,监督程序会从作业序列中取下一个作业,这时候就不需要人工操作了。单道批处理是自动、单道、顺序的,也就是说一个时间点只有一个程序占用整个计算机资源,直到处理完一批作业为止。

    例子:现有三道作业,第一道作业需要输入 10 S,运行 20 S,输出 20 S;第二道作业需要输入 20 S,运行 20 S,输出 30 S,然后再运行 30 S,输出 10 S;第三道作业需要输入 20 S,运行30S,输出 30 S。

    共耗时 (10+20+20)+(20+20+30+30+10)+(20+30+30)= 240 S

    CPU利用率: (20+20+30+30)/240=41.7%

    输入设备利用率:(10+20+20)/240=20.8%

    输出设备利用率:(20+30+10+30)/240=37.5%

  3. 多道批处理

    单道批处理解决了人工操作的麻烦,但是利用率还是偏低,显然是因为当前作业在使用 CPU 的时候,并没有使用输出设备和输入设备,这样导致了资源利用不充分。

    多道批处理中,计算机同时有几道作业(程序)在运行,在一个时间点上,可能一个作业在使用 CPU,另一个作业在使用输出设备,还有一个作业在使用输入设备,这样就提高了系统的吞吐量。

    特征 :多道性、无序性、调度性(这个得看你的调度程序是如何管理处理机、内存、设备和文件的)。

    例子 :现有三道作业,第一道作业需要输入10 S,运行 20 S,输出 20 S;第二道作业需要输入 20 S,运行 20 S,输出 30 S,然后再运行 30 S,输出 10 S;第三道作业需要输入 20 S,运行 30 S,输出 30 S 。

    多道批处理

  4. 分时系统

    多道批处理系统有一个很大的缺点,就是周期为处理一批作业的时间,这么长的时间,万一哪个程序突然出错导致计算机奔溃,就要重新检测调试,折磨死人。

    为了能够进行人机交互,以及多个用户共享一台计算机,后来发展出了分时系统。

    顾名思义,将时间分片,每个程序连续使用计算机 CPU 的时间是固定的,到了必须换程序。也就是说,假设你的时间片定为 3 毫秒,当前程序运行完这 3 毫秒,就轮到正在等待的下一个程序跑,这样就保证了计算机不会被一个又臭又长的程序死占着。

    多路性 :多个用户程序同时运行(轮流着用)

    独立性 :每个程序独立操作,互不干扰

    及时性 :每次轮转都挺快的,反正不超过 1 秒啦。

    交互性 :有了时间片的轮转,我就可以操作计算机啦(至少不用像批处理一样,要等处理完才能操作计算机)

    当然分时系统主要提高响应的及时性,及时了解并解决程序的 bug 是很重要的。

  5. 实时系统

    分时系统虽然可以实现了时间片的轮转使用,但是有时候反应不够迅速。实时系统就是为了可以即时响应外部事件的请求而发展出来的,实时系统需要在规定的时间内完成对该事件的处理,并且实时事件还不止一个,需要实时系统协调一致地完成。

    例如汽车的车祸处理系统,如果突然受到猛烈碰撞,汽车系统就要启动实时救生措施,所有计算机资源都要让给救生程序,什么音乐软件呀、广播软件呀通通让开。这时候救生气囊程序和强制刹车程序会在很短很短的时间内启动,这就是即时性。

    救生气囊程序和强制刹车程序都是实时任务,需要周期地检测是否出现碰撞(例如 0.1 秒检测一次是否出现碰撞),这叫重复性。救人争分夺秒,因此实时任务要有紧迫性,必须给我在规定时间内启动。

    和分时系统相比,实时系统更及时、更可靠。

  6. 微机操作系统

    微机就是我们使用的电脑,例如 Windows 系统,计算机制作成本低了,自然大家都可以使用计算机了,所以发展了微机操作系统给个人使用。一开始微机是单用户单任务的,现在都发展到了多用户多任务。

4. 操作系统的主要功能

4.1 处理机管理

首先我要说明的是,把进程看作是人,操作系统看作是一个社会。

  1. 进程控制

    创建一个进程的时候,首先你的给进程分配一个身份证,我们称之为进程控制块,分配相应的资源,例如内存(居住的地方)。

    进程需要等待 CPU 来处理它,到了合适的时候,操作系统会将进程调度到 CPU 中,此时进程就处于运行状态了。

    当进程执行完之后就没有利用价值了,所以操作系统需要回收进程占用的资源,例如内存空间。

    所以进程控制包括:创建、运行、撤销

  2. 进程同步

    有些资源是有限的,同一时刻只能有一个进程占有,例如打印机。如果进程 A 想要使用打印机的时候会向操作系统申请,如果操作系统发现打印机被进程 B 占用了,操作系统会让进行 A 洗洗睡,等醒来了再过来,这叫做进程互斥

    有些工作需要多个进程协同完成。如果进程 B 需要用到进程 A 处理后的数据,就必须等进程 A 处理完后才能执行,这叫进程同步。只要进程 A 还没有执行完,进程 B 就会去睡觉(睡眠),直到 A 处理完后去叫醒 B。这就叫进程同步

  3. 进程通信

    进程间进行信息交换,例如输入进程将数据送到计算进程,计算进程将结果送到打印进程。

  4. 进程调度

    对进程队列中的进程进行调度,将 CPU 的使用权分配给指定进程。

这里需要注意的是,进程使用处理机都要通过操作系统同意。

4.2 存储器管理

  1. 内存分配

    进程的最终目的是被执行,但是被执行的进程必须在内存中,所以一开始操作系统就要为每一个用户程序分配内存空间。

  2. 内存保护

    用户程序只能访问自己程序的内存空间,不能越界(到其他用户程序或系统程序空间)

  3. 地址映射

    目标程序的地址和内存中的物理地址是不一致的,所以我们需要做一个映射操作。

  4. 内存扩充(虚拟存储器)

    采用虚拟存储技术从逻辑上扩充内存空间,使大于实际内存空间的程序可以得以运行。主要采用请求调入置换功能实现内存扩充 。

4.3 设备管理

  1. 缓冲管理

    设备的速度和 CPU 的速度不匹配,需要为设备分配缓冲区并进行管理。

  2. 设备分配

    为用户 I/O 请求分配相应的设备,要打印机就有打印机。

  3. 设备处理

    实现 CPU 和设备控制器之间的通信。例如对打印机的写操作,操作系统将实现的细节都封装好了,暴露给你的只有写这个抽象的操作。

4.4 文件管理

  1. 文件存储空间管理

    设置相应的数据结构存储(磁道、扇区等)。

    对存储空间进行分配和回收。

  2. 目录管理

    对每个存在外存上的文件建立一个目录项,主要包括文件名、属性和在磁盘上的位置等信息。最后形成一个树形结构。

  3. 文件的读、写管理和保护

    在 Windows 系统中,有些文件只有管理员才能访问,这就是文件保护。Linux 还有些文件只能读,不能写,属于文件的使用权。

5. 操作系统结构

微内核、客户服务器模式。也就是将核心功能做得足够小,其他服务调用微内核提供的接口就行了。