考研408《操作系统》复习笔记,第一章(结合题目重新修改版)

一、操作系统是啥玩意?

1、计算机操作系统就是:

  • 操控、管理整个计算机软件硬件的资源、并合理分配计算机工作、资源

(人话):操作系统是计算机系统资源的管理者

  • 以给用户和其他软件提供更方便的接口和环境

(人话):它为上层提供服务

  • 它是计算机系统中最基础的系统软件

(人话):是软件,是最接近底层硬件的一套软件

1)对于第一句话:【操控、管理整个计算机软件硬件的资源,是计算机系统资源的管理者】的理解:

2)第二句话:【它为上层提供服务

用户和软件无需关心底层硬件所要的0、1这些二进制代码,操作系统为用户操作软件提供了更有友好的“接口”,相当于中间商

 3)第三句话:【是最接近底层硬件的一套软件

例题:

1、操作系统是对( C )进行管理的软件

A、软件

B、硬件

C、计算机资源(软件、硬件、文件都统称 “计算机资源”)

D、应用程序

2、操作系统和用户间接口的定义

前面说了它是为上层提供服务,体现就是操作系统为用户操作软件提供了更有友好的“接口,具体这个接口是啥呢?

一开始学的时候我也不是很理解,这块很抽象,但是在我做完题和一些开发经验,我总结了我的理解,按照面向的服务对象,我们主要分为两大类:

  • 1、面向用户的:命令接口
  • 2、面向程序员的:程序接口

1、命令接口

我用最简单的话解释!首先,我们要知道我们用户、软件这些要用计算机的资源(CPU、内存、摄像头设备...)一定一定是被操作系统隔开的只能告诉【操作系统】让它来管理这些资源

那么命令接口【人】能够直接告知、调用操作系统去执行一些任务的接口(注意是调用操作系统,不是调用计算机系统)

命令接口】又分【联机命令接口】和【脱机命令接口

联机命令接口】就是大家常用的【Window + R】这种打开“黑窗口”输入命令来执行的操作,一般普通用户可能比较蠢就只会用鼠标点图标,但是程序员可能一般用得多一点,但是“执行命令” 跟 “鼠标点图标” 的效果是一样的

联机命令接口】特点就是:命令一条一条的执行

例子:

脱机命令接口】就是将大批大批的命令通过.bat文件执行

特点就是:命令可以一堆一堆的执行

例子:

误区:当时我一直困惑,那既然是多个命令大批大批的执行,那写个C语言、Python、java代码文件,然后整个文件执行,不也是一样的吗??不是!!!C语言、python这些代码写的只是代码,并不是调用操作系统执行任务的命令,就算是里面的库函数调用了操作系统,但是那也是由【程序】在运行时去执行的,“发出命令”的主体不是【人】

会有这个误区很正常,因为很多人没有接触过【.bat】、【.sh】文件,这些是专门用来写多条操作系统命令的文件,【.bat】是windows系统的、【.sh】是Linux系统的

(比如下面这个例子,这个.bat文件就三个命令,打开谷歌浏览器同时打开两个微信)

2、程序接口(又叫 “系统调用” 或 “广义指令”)

程序接口:就是【程序、app】这些东西去调用操作系统去执行一些任务的接口(注意是调用操作系统,不是调用计算机系统)

(看出区别了没?命令接口是人去执行命令来操作操作系统,“发出命令”的主体是【人】;程序接口是程序员写好的项目代码,在运行的时候这个程序去调用操作系统,“发出命令”的主体不是【人】

程序接口】就记住面向的对象是程序员、而不是普通用户,然后程序调用【程序接口】执行命令,“发出命令”的主体是【程序】

例子:

3、GUI接口

GUI也是操作系统提供给用户和操作系统之间交互的接口,但是记住GUI界面本身不属于操作系统,他也是【调用程序接口】来使用操作系统

虽然GUI图形接口不是操作系统一部分,但是他所用的系统调用是操作系统的一部分

其中【GUI】就是搭建常用的图形化操作,点一下图标打开啊、右键删除、新建等等......

例子:

这里注意,常见的接口还应该加上【GUI】接口,也就是共3大类:【GUI】【命令接口】【程序接口】

(但是注意:【命令接口】和【程序接口】统称为用户接口

3、人话总结:

看到这你肯定还是一脸懵逼不知道我再说什么玩意,我总结一下我自身的当时的困惑:

1、为什么【命令接口】是执行命令调用操作系统,但是反而说是 “面向用户” ?为什么【程序接口】是让程序自己调用操作系统命令,却说是 “面向对象是程序员”?

从通俗角度思考:

        因为这里 【用户】指代:程序员+普通电脑使用者!!!你普通人也可以自己随便学点简单的命令(比如cd D:/进入D盘),程序人也是,所以命令接口面向普通用户;而你普通人不会自己为了实现一个功能来写一个软件吧?所以程序接口是面向程序员(比如你想调用操作系统打开播放器播放本地音乐,不可能写一个软件来实现吧?只有程序员可能会这样)

从三大类接口执行命令的【主体】来看:

【GUI接口】:一点命令都不会的电脑小白用户(当然程序员也不是神,也会点图标)

【命令接口】:普通用户+程序员(只要会敲点命令就行,普通人也可以敲命令)

【程序接口(系统调用)】:程序(是只有程序员才会用的,但是写代码完之后,执行命令时是程序自己主动的执行命令)

2、那我们写的C语言、python这些代码到底是不是【程序接口】?还是说他们本身就可以直接操作计算机系统资源?

        不是!!他们也不能直接接触计算机系统的资源!!只有操作系统才可以碰计算机底层资源!那么对于C语言、python这些代码,他们会有一些 “库函数”,有的库函数只是简单的数学运算、数组排序...等等功能,但是有些库函数是可以调用操作系统执行一些命令操作的(比如:C语言fork()调用操作系统来创建一个新的进程、在Python中使用os.open()函数来调用操作系统打开一个文件)

我来画个图来理解:这些库函数也是调用的操作系统自己提供的一些【系统调用的接口】,通过这些【系统调用(程序接口)】再向操作系统的【内核程序】请求服务,最终由【内核程序】操作、使用计算机系统的资源

内核程序会在后面章节讲到,有个了解先

3、那是不是命令接口那样直接敲命令就是直接调用计算机系统资源了?

再次强调!!没人能够直接跨过操作系统来接触计算机底层!!!命令接口是更加快、直接地操作【操作系统】!不管是命令接口还是程序接口还是GUI,都是操作【操作系统】!!!

结合题目加深印象:

1、用户可以通过( B )两种方式使用计算机

A、命令接口和函数

B、命令接口和程序接口 (用户接口就是“命令接口”和“程序接口”,用户包括了“普通用户”和“程序员”,当然用户还可以使用GUI图形化接口使用计算机,只不过它本身不属于操作系统的部分)

C、命令接口和文件管理

D、设备管理方式和系统调用

2、系统调用是由操作系统提供给用户的,它( B

A、直接通过给键盘交互方式

B、只能通过用户程序间接使用(系统调用就是程序接口,是【程序】和操作系统之间的交互)

C、命令接口和文件管理

D、设备管理方式和系统调用

3、操作系统提供给程序员的接口是( C

A、库函数

B、高级语言

C、系统调用(操作系统只是提供系统调用接口,至于代码、库函数这些都是高于操作系统层面之上的)

D、子程序

4、系统调用的目的是( A

A、请求系统服务(B、C、D这种直接涉及系统资源的是操作系统内核程序干的事,其实系统调用的接口也是操作系统自己的一个“接口函数”,操作系统真正直接接触系统资源的是内核程序)

B、终止系统服务

C、申请系统资源

D、释放系统资源

5、下列选项,操作系统提供给应用程序的接口是( A

A、系通调用(再次记住,库函数是高级语言提供的操作系统的系统调用相对应的函数(虽然有的库函数和系统调用无关),但是库函数属于用户程序,是系统调用的上层)

B、中断

C、库函数

D、原语

二、操作系统的特征

前提知识点:这里需要知道的一个知识点后面可能会方便各位理解———程序是在内存中运行的 

(这就是为什么当你的内存不够大时,运行多个程序会卡,而且一个程序运行下去可能要生成更多的临时数据资源,占用更多内存,导致电脑更卡)

1、总的4大特征:

(其中【并发】和【共享】是最基本的特征,二者互为存在条件)

2、并发

并发是指:两个或多个事件在同一时间间隔内同时发生

注意:这个【同时】是宏观上的同时微观上是交替发生的,怎么解释呢?

那就要区分一下【并发】和【并行】两个概念

【并发】两个或多个事件在同一时间间隔内同时发生,也就是同时跟个千手观音一样干着N份活

【并行】是两个或多个事件在同一时刻同时发生,虽然是要一次性干这么多活,但是也得稍微有个前后顺序,在微观层面的某一小时刻还是只能执行一件事

用两渣男约会来比喻:

而【操作系统的并发性】就是【计算机中同时运行多个程序】(宏观同时,微观交替)

操作系统程序并发同时诞生的

但是留意:

1、在单处理机环境下(处理机就是CPU)

【CPU和I/O设备】、【I/O设备和I/O设备】、【CPU和通道】可以实现同时“并行”!!(通道也叫“I/O通道”,是一种特殊的处理器,可以独立于CPU去执行 输入/输出 指令,负责管理外部设备与内存之间的数据传输)

2、在流水线、多处理机(多个CPU)环境下也可以 “并行” (以后会解释)

例题:

1、单处理机系统中,可并行的是(Ⅱ、Ⅲ、Ⅳ

Ⅰ、进程与进程(一个CPU一段时间只能执行一个进程,就算以极快的速度分时执行各个进程,那也是“并发”,而不是“并行”,并行是真的同时执行几个进程)

Ⅱ、处理机和设备

Ⅲ、处理机和通道

Ⅳ、设备和设备

3、共享

共享就是计算机的资源共享,系统中的资源可供内存中多个并发进程使用 

(这里资源不仅仅指内存数据,还有什么音响啊、摄像头...等等都可以算资源)

这种 “同时” 跟并发一样,也是 “宏观上” 同时“微观上” 分时共享

根据计算机系统的资源的区分,可以分为两种:【可同时共享的资源】【临界资源】

这两种资源对应的共享方式也可细分为:同时共享互斥共享两种共享方式

互斥共享——>【临界资源】

        在一段时间内只允许一个进程访问、等到它访问完才允许给别的进程使用的资源就叫【临界资源】,对于这种资源的共享形式叫【互斥共享】

        为什么要这样?比如qq、微信同时要视频通话,那摄像头资源就只能给一个应用使用,不然不是视频画面乱套了吗?网易云跟qq音乐同时要放歌,那音频播放器只能给一个应用使用;打印机被两个进程申请,如果同时共享的话,在一张纸上,A文件打印一行B文件打印一行,这像话吗?

同时共享——>【可同时共享的资源】

        在一段时间内允许多个进程“同时”访问(虽然这里的“同时”是宏观相对这一段时间内的同时,微观上还是以几乎察觉不到的速度交替访问着资源)这种资源就叫【可同时共享的资源】,对于这种资源的共享形式叫同时共享

        就是比如qq跟微信跟短信都可以同一时间给别人发送文件、照片......看似是同时进行的,但其实 “微观层面” 上其实是分时交替着读取内存资源

一些常见的【临界资源】【可同时共享的资源】

【可同时共享的资源】:

还有用 “重入代码” 编写的文件....

【临界资源】:

大多数计算机的【物理设备】、还有软件里要用的栈、变量、表格

一定要记住:【并发】和【共享】是相互依存的,缺一不可

4、虚拟

虚拟就是将一个 “物理实体” 变成 若干个 “逻辑上的对应物”,物理实体是实际存在的(比如电脑运行内存大小、计算机的1个单核CPU),逻辑对应物是用户感受到的(比如玩游戏时感觉运行内存变得好大、打开多个软件以为是多个CPU同时工作)

注意:【虚拟性】依赖于【并发性】来体现,如果没了【并发性】,【虚拟性】就没有存在的意义

5、异步

这个对于java以及前端开发的兄弟们应该再熟悉不过了,异步就是多个进程并发运行,但是有限的资源被一个进程占用时,有的进程可能就需要等待,并不是所有进程都是一路顺利贯穿到底的

我自己的项目经验的例子是:

        有的时候我们开发前端,当加载页面的时候有些图片资源是需要通过向后端发送请求获取的,那这跟时候加载页面会直接运行 “渲染静态数据”、“渲染样式”......等等进程,而“渲染图片”这个进程可能就要等待请求成功响应回数据之后,再渲染,页面就会出现空白或者预加载的假图片;

        或者我们的setTimeout这种函数,就是异步,我们正常执行别的函数、进程,然后等我们设置的时间到了,才会触发setTimeout这个函数的进程开始。

《王道考研》里的例子是:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岑梓铭

网络乞丐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值