[操作系统居家课程讲义]ch02_五大功能

author: hxy
date: 2020.3.25

上一部分内容主要是操作系统的介绍,现在我们开始学习一些比较专业的术语,但还是在日常使用的基础上,平时对计算机稍微喜欢研究一点的同学,应该在学习的时候能够产生“哦是这样啊”的恍然大悟的感觉。

不过这一讲学完以后,对操作系统还是只有一个大概的认识。更专业的部分从下一讲才开始。

但是这一讲其实是整个课程的总脉络和总框架,以后的所有内容都是围绕这一脉络展开的。所以上一讲是操作系统的简介,而这一讲算是这门课程概述和引论。

操作系统的功能

上一讲我们说操作系统有5个主要功能,这一讲详细的剖析一下这五个功能都涉及到哪些方面,需要解决哪些具体问题,并提出一些解决问题的整体思路。

后面的课程就是沿着这节课所讲的整体思路,来具体的实现细节部分。

1. 处理机管理

处理机管理的核心就是尽最大可能的充分发挥cpu的运算能力,以达到(运算速度)更快,(执行任务数)更多,(资源利用率)更高的“三更”目标。

假如你的电脑是单颗双核cpu,也就意味着你的电脑在某一时刻可以同时执行两个运算任务,比如一个核计算1+1、另一个核算3-2。

这个运算粒度太小,我们稍微把焦距调大一点,让一个核处理LOL,一个核下载电影。如果此时有第三个任务发生,比如你想开网易云放首歌,那么cpu没有核了,这件事就做不了。

要解决这个问题,我们把cpu的运算时间平均分成一个个时间单位,叫做 时间片 ,所有的任务轮流使用cpu。每个任务最少可以使用一个时间片的时间,然后把cpu的使用权让给其他任务。这就叫做 处理机调度

总的来说,处理机管理的任务就是做好上面所说的这个调度。

为了实现这个调度,要考虑三个问题:

  • 1.1 怎么划分任务单位。比如你在IE里面开了好几个标签页,是以IE为单位统一跟其他软件争夺cpu时间,还是以标签页为单位,这是个问题。类似还有qq窗口,游戏平台上的游戏等等。

    因为每个软件都有他自己的特殊之处,所以操作系统统一规定了一个任务单位,叫做 进程

    所以上述问题就变成了,是把整个IE软件当作一个进程,还是把一个标签页当作一个进程。这件事情就可以由开发IE软件的程序员自行决定了。

    后来为了更进一步的管理,又增加了 线程 的概念,这个以后再详细讲。

  • 1.2 怎么划分时间片。按规定 一个时间片是cpu时间的最小分配单位 ,时间片最好是跟一个进程完成一次任务的时间相同。

    如果时间片太大,进程分到时间片之后很快完成任务,时间片内的时间就会白白浪费掉,就会大大降低cpu的 利用率 ;反之如果太小,一个进程分到时间片后,还没完成任务就要退出来让给别人,然后再等待下一次机会继续执行,就会大大降低任务执行的 效率

    因为进程的尺度是应用软件程序员确定的,所以一个进程完成一个任务需要多少时间不好确定。这就是利用率和效率之间的权衡。

  • 1.3 怎么进行分配。当你的cpu空闲下来时,接下来的这个时间片该分给哪一个进程,这就需要 调度算法 来确定。

    好的调度算法会可以权衡效率和用户体验,不好的调度算法可能让用户点完鼠标之后卡住 —— 因为cpu被分配去下载小电影了。

  • 还有一些其他的问题,比如多个进程之间可能需要互通有无,叫做 进程同步进程间通信

2. 存储器管理

一般而言,数据和程序都安装存放在硬盘上,但是在冯诺伊曼体系结构里,cpu不能直接跟外设打交道,所有的程序和数据都必须先放在内存里,然后由cpu进行计算。

硬盘大小可能是TB为单位的量级,而内存一般就是32GB或者64G,所以内存本身来说是不够用的。所以存储器管理的核心任务就是 如何在有限的空间里执行无限的任务 ,因为操作系统的开发者没办法预知用户会同时打开多少窗口运行多少程序。

解决这个问题的方法叫做 内存分配机制 ,里面涉及到许多算法,基本思想就是谁着急用就先让谁用,着急用的根据就是是否分配到了cpu时间片。

将硬盘的数据装入内存,处理完之后一般需要再把结果存回硬盘里,这就意味着需要在硬盘空间地址和内存空间地址之间维护一个对应的关系,叫做 地址映射

此外,如果一个任务执行完了,它所占据的内存空间也会空出来,产生一个空隙。时间一久,内存就会变得全是小碎片。这也是存储器管理要解决的问题。

最后,如果内存实在太小,操作系统也可以突破冯诺伊曼次元壁,把C盘里的一部分拿出来当作内存使用,叫做 虚拟内存

3. 设备管理

设备基本上计算机系统中除了cpu和内存以外的所有设备,比如硬盘、U盘、鼠标、键盘、网卡、显示器等等。设备管理主要是外设与cpu之间的输入输出管理(I/O,Input/Output)。

一般情况下,cpu的处理速度远大于外设的处理速度,所以设备管理的第一个问题就是解决速度匹配,采用的方法是设置 缓冲区

第二个要解决的就是控制这些设备,比如当你在USB接口上插入一个设备,系统要识别这是一个U盘,还是一个USB键盘,从而为这个设备安装驱动、分配相应的系统资源。

第三个就是系统需要屏蔽设备的具体差异,将一个个硬件设备抽象成独立的虚拟设备,从而为应用开发人员提供统一的接口和更好的开发体验。

4. 文件管理

文件管理是大家比较熟悉的内容了,主要涉及到如何在磁盘上存取文件、如何检索文件、如何组织目录、文件如何进行共享。

比如Windows系统里采用的磁盘分区,或者在安卓系统里都大同小异的文件目录结构等等。

5. 用户接口

这一部分主要是面向程序员的,不同的操作系统针对系统功能会提供不同的接口,有时候我们也叫做系统函数调用。

关于如何设计良好的系统函数调用,可以在软件开发设计模式等等课程中学习其中的思想。

关于如何使用系统函数,则在程序设计课程中,针对不同的系统功能去具体学习,以c语言为例,比如printf函数就是一个输出打印的接口,而fread函数是读取文件的接口。当然,这些函数又是C语言库对于底层调用进行封装后最终呈现的效果。这需要在编程实践中不断的积累。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值