写个博客督促自己学习,五天,听完王道,入门操作系统,其他经典课(如李治军老师的课程)之后也会学 欢迎小伙伴和我一起学习操作系统~
第一章 操作系统的概念、功能和目标、特征、发展和分类、运行机制与体系结构、中断和异常、系统调用
一、概念
1.操作系统(OS)
是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机中最基本的系统软件。
2.计算机系统的层次结构
3.常见操作系统:Windows、Android、iOS、MacOS、Linux
个人理解:(如有错误,感谢指出!)
我觉得操作系统和其他应用软件一样(其实很不一样),
比如你学过一些语言,它会有些库函数,你直接通过函数名print()调用可以实现打印字符,
又比如你买的一台电脑,它有裸机+操作系统+和一些基本软件,你可以通过这些软件实现别的功能,
再比如给你一个裸机+基本的操作系统,你通过调用操作系统给你的一些接口,可以写一些其他程序,
这里就像给你一个裸机,需要你自己写一个软件对它进行操作,而为了对资源进行调度,为了系统安全性等等一些原因,将这些东西封装在一起,名字就是操作系统。
以上理解不保证完全正确,我为什么会有以上的理解,是因为会有实验让自己编写操作系统,这样的话不就和应用软件的编写一样了。在我进行操作系统实操后,可能会修改个人理解。
二、功能和目标
1.作为系统资源的管理者
提供的功能:
1.文件管理:找到应用程序(可执行文件 .exe)的存放位置
2.内存管理:把该程序的相关数据放入内存
3.处理机管理:对应的进程被处理机(CPU)处理
4.设备管理:将设备分配给进程
目标:安全、高效
2.作为用户和计算机硬件之间的接口
提供的功能:
1.命令接口:允许用户直接使用
? 联机命令接口:用户说一句,系统做一句(交互式)
? 脱机命令接口:用户说一堆,系统做一堆(批处理)
2.程序接口(=系统调用=广义指令):允许用户通过程序间接使用
? 由一组系统调用组成
? 通过调用 .dll文件 实现一些功能
3.GUI:图形用户接口
? 如Windows、Android、iOS、MacOS的图形化操作界面
目标:方便用户使用
3.作为最接近硬件的层次
提供的功能和目标:
实现对硬件机器的扩展
在裸机上安装操作系统,可以提供资源管理功能和方便用户的服务功能
通常把覆盖了软件的机器称为扩充机器(虚拟机)
个人理解:(如有错误,感谢指出!)
操作系统的作用还是很好理解的吧,一堆裸机,普通用户根本使用不了,所以程序员就写了操作系统这个基本软件来供普通用户使用,普通用户只要使用操作系统就行。
操作系统要扩展硬件,使能够进行资源管理以及让用户使用。
向上能让用户使用:能够给普通用户提供接口,方便用户使用;
向下进行资源管理:能够进行资源管理和分配,安全高效的使用计算机。
三、四个特征
并发性和共享性互为存在条件。
1.并发:指两个或多个事件在同一时间间隔内发生。
? 宏观上同时,微观上交替
? 并行:指两个或多个事件在同一时刻同时发生。
? 操作系统的并发性:计算机系统中同时存在者多个运行着的程序。
2.共享:即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
? 互斥共享方式:一个时间段内只允许一个进程访问该资源
? 例子:视频时不能拍照,会提示摄像头被占用
? 同时共享方式:允许一个时间段内由多个进程“同时”对它进行访问
? 宏观上同时,微观上交替(即分时共享)
? 例子:一边打游戏,一边听音乐,扬声器被两个进程“同时”访问
3.虚拟:把一个物理上的实体变为若干个逻辑上的对应物。
? 物理实体是实际存在的,而逻辑上的对应物是用户感受到的。
背景知识:一个程序需要放入内存并给它分配CPU才能执行。
虚拟技术中的“空分复用技术”:虚拟内存
例子:某大型游戏的运行内存为6GB,电脑4GB内存,可以运行游戏
虚拟技术中的“时分复用技术”,微观上处理机在各个微小的时间段内交替着为各个进程服务。
例子:同时运行一个大型游戏,挂着qq微信,还听着歌
每个运行在Windows环境下的进程,在载入时操作系统都会自动为他们指派虚拟内存空间。简单地说,虚拟内存技术就是一种使用硬盘等外部存取设备,来保存物理内存不足以存放的信息的技术。
虚拟内存是计算机系统内存管理的一种技术。 它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
4.异步:由于资源等因素的限制,进程的执行通常不是一贯到底的,而是走走停停的,且以一种不可预知的速度向前推进
个人理解:
让进程并发的原因应该很好理解,比如你要完成洗衣服,蒸米饭,扫地,看电视等,你可以把衣服放进洗衣机后,去淘米放进电饭煲,然后去扫地,顺便开着电视,为了提高效率,这样同时做几样事应该很好理解吧。
进程并发后,肯定要有资源共享,不然两个进程不能同时访问某种资源,就不能并发了;
虚拟技术在第三章会重点讲,现在讲一下我目前的认识:
空分复用技术:虚拟内存:把空间切片,正在运行的进程的空间放在内存,某些进程的空间放在外存,运行的时候再放入内存。
时分复用技术:多道程序技术,分时系统:可能就是并发吧,宏观上同时,微观上交替
异步应该也好理解,交替,不就是异步,而交替进行,肯定会有需要等待的时候,所以就走走停停,不可预知。
四、发展和分类
1.手工操作阶段
在纸带上打孔,通过纸带机读取数据,输入到计算机,计算机处理数据后,将结果从内存通过CPU输出到纸带机,纸带上就是运行结果。
? 计算机的处理速度快,纸带机的输入输出速度慢
缺点:用户独占全机、人机速度矛盾导致资源利用率极低
2.批处理阶段——单道批处理系统
引入脱机输入/输出技术(用磁带完成),并监督程序负责控制作业的输入输出
? 监督程序是操作系统的雏形
程序员们提前把自己的程序放到纸带机上,有专门的外围控制机,把纸带机上的纸带数据读到磁带里,之后计算机直接从磁带进行读出和写入。
优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升
缺点:内存中仅能有一道程序运行,只有该程序运行结束后才能调入下一道程序。CPU有大量的时间是在空闲等待I/O完成。资源利用率依然很低。
3.批处理阶段——多道批处理系统
每次往内存中输入多道程序,由操作系统负责管理这些程序的运行,各个程序并发执行。
? 操作系统正式诞生,并引入了中断技术
优点:多道程序并发执行,共享计算机资源,资源利用率大幅提升。CPU和其他资源保持“忙碌”状态,系统吞吐量增大。
缺点:用户响应时间长,没有人机交互功能(用户提交自己的作业之后,只能等待计算机处理完成,中间不能控制自己的作业执行)
4.分时操作系统
计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。
优点:用户请求可以被即时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。
缺点:不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。
5.实时操作系统
计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。
特点:及时性、可靠性
优点:能够优先响应一些紧急任务,某些紧急任务不需要时间片排队。
? 硬实时系统(导弹控制系统、自动驾驶系统):必须在绝对严格的规定时间内完成处理
? 软实时系统(12306火车订票系统):能接受偶尔违反时间规定
6.其他操作系统,网络操作系统、分布式操作系统、个人计算机操作系统
个人理解:
最开始是手工操作阶段,用纸带机输入数据,速度很慢,而CPU的处理速度很快,所以有人机速度矛盾。
为了解决输入速度慢的问题,引入脱机输入/输出技术,改用磁带输入输出,此时进入批处理阶段,开始是单道批处理系统,缓解了人机速度矛盾,但是内存中仅能有一道程序运行,资源利用率依然很低。
然后升级为多道批处理系统,每次往内存中输入多道程序,由操作系统负责管理这些程序的运行,多道程序并发执行,资源利用率大幅提升。能快速执行多个程序后,又考虑到没有人机交互功能,不能在运行中间控制自己的作业执行。
所以将时间切片,即分时操作系统,以时间片为单位,计算机轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。用户请求可以被即时响应,解决了人机交互问题。但是操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。不能优先处理一些紧急任务。
所以为了能够优先响应一些紧急任务,让某些紧急任务不需要时间片排队,改进为实时操作系统,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。
五、运行机制与体系结构
两种指令
? 特权指令:如内存清零指令(不允许用户程序使用)
? 非特权指令:如普通的运算指令
两种处理器状态(用程序状态字寄存器PSW中的某标志位来标识)
? 核心态(管态):都可以执行
? 用户态(目态):此时CPU只能执行非特权指令
两种程序
? 内核程序:系统的管理者,既可执行特权指令,也可执行非特权指令,运行在核心态
? 应用程序:只能执行非特权指令,运行在用户态
所以操作系统中的哪些功能应该由内核程序来实现呢?
内核是计算机上配置的底层软件,是操作系统最基本、最核心的部分。
实现操作系统内核功能的那些程序就是内核程序。
不同操作系统对内核功能的划分可能不一样,所以就引出了操作系统的体系结构:大内核和微内核
操作系统的运行机制,有特权指令和非特权指令,特权指令只有CPU处于核心态时才能执行,内核程序运行在核心态;
非特权指令在核心态和用户态都能执行,应用程序运行在用户态。
操作系统内核是计算机上配置的底层软件,只包含时钟管理,中断处理,原语的是微内核,还包含进程管理、内存管理、设备管理的是大内核。
原语是一种特殊的程序,处于操作系统的最底层,运行具有原子性,运行时不可中断。
操作系统的体系结构:大内核和微内核。
大内核是将操作系统的主要模块都视为系统内核,性能高,但是内核代码庞大,结构混乱,难以维护。
微内核只把最基本的功能保留在内核,内核的功能少,结构清晰,方便维护,但是需要频繁的在核心态和用户态之间切换,性能低。
六、中断和异常
本质:发生中断意味着需要操作系统介入,开展管理工作。
1.当中断发生时,CPU立即进入。
2.当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
3.对于不同的中断信号,会进行不同的处理
操作系统的管理工作(进程切换、分配I/O设备等)需要使用特权指令,因此CPU要从用户态转为核心态。
中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。
有了中断,才能实现多道程序并发执行。
用户态 --> 核心态是通过中断实现的,且中断是唯一途径。
核心态 --> 用户态是通过执行一个特权指令,将程序状态字PSW的标志位设置为用户态。
中断的分类
另一种分类:
外中断的处理过程
1.执行完每个指令后,CPU都要检查当前是否有外部中断信号
2.若检测到外部中断信号,需要保护被中断进程的CPU环境(如PSW、PC、各种通用寄存器)
3.根据中断信号类型转入相应的中断处理程序
中断处理程序执行在核心态
4.恢复原进程的CPU环境并退出中断,返回原进程继续往下执行
为了实现多道程序并发执行,引入了中断机制。
发生中断,就意味着操作系统介入开展管理工作,CPU会立即进入核心态,中断是CPU从用户态进入核心态的唯一途径。
中断分为内中断和外中断,内中断来自CPU内部,如陷阱、故障、终止,外中断来自CPU外部,如外设请求、人工干预
七、系统调用
程序接口=系统调用,可以供应用程序调用的特殊函数。
应用程序通过系统调用请求来获得操作系统的服务。系统中的各种共享资源都由操作系统统一管理,因此在用户程序中,凡是与资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
系统调用相关处理涉及到对系统资源的管理,对进程的控制,这些功能需要执行一些特权指令才能完成,因此系统调用的相关处理需要在核心态下进行。
系统调用与库函数的区别
系统调用(即程序接口)是操作系统向上层提供的接口;
有的库函数是对系统调用的进一步封装;
当今编写的应用程序大多是通过高级语言提供的库函数间接地进行系统调用。
系统调用背后的过程
个人理解:
系统调用又叫程序接口,要与之前的命令接口区别开。
命令接口是你直接发出命令给操作系统,查看系统时间或修改系统时间等等
程序接口是你通过某应用程序看到当前时间,而这个时间是程序 通过程序接口 从操作系统获得的
系统调用 调用的就是操作系统,是应用程序 给操作系统 发出 系统调用请求,要操作系统干一些只有它能干的事。
系统调用会使处理器从用户态进入核心态。
凡是与资源有关的操作、会直接影响到其他进程的操作,一定需要操作系统的介入,即需要系统调用来实现。
系统调用发生在用户态,对系统调用的处理发生在核心态
执行陷入(/trap/访管)指令会产生内中断,处理器从用户态进入核心态
|