操作系统概述

操作系统的作用

        操作系统作为用户和硬件资源之间交互的媒介,向上提供的是抽象的系统调用的接口,给用户提供方便易用的服务;向下作为硬件资源的管理者,方便管理使用各种硬件软件资源。常见的操作系统由苹果,windows,linux,symbian。

        用书上的标准话语来讲就是操作系统是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充,其主要作用的管理硬件设备,提高他们的利用率和系统的吞吐量;并为用户和应用程序提供一个简单的接口,以便于用户和应用程序使用硬件设备。于是,在人机交互,资源管理和资源抽象等不同方面有着举足轻重的作用。举一个例子:用微信与朋友进行视频聊天,打开微信,逐层打开文件夹找到可执行文件的存放位置(文件管理),双击可执行文件打开应用程序(内存管理),程序正常运行需要处理机(处理机管理),视频聊天需要分配摄像头(设备管理)。

        总结来说:操作系统是资源的管理者,包括硬件和软件资源,要如何设计和实现这些功能

大体框架就是:

第二章:处理机管理

第三章:存储器管理

第四章:文件管理

第五章:设备管理

计算机最底层是裸机,只能执行二进制指令,这些二进制指令对用户来说是不友好的,于是就要提供给用户和其它软件方便易用的接口和服务,这个重任就交给了操作系统。

       向上层提供的方便易用的服务(其实就是一种很典型的封装的思想,将一些复杂的硬件功能封装成简单易用的服务,上层的用户不用关心底层的硬件实现细节,只用向os发出想要使用的服务即可)的理解:最底层的硬件只能执行二进制指令,安装操作系统之后,我们不必直接与底层这种只听得懂二进制指令的硬件打交道,我们将需求告诉操作系统我们想要的服务,至于将命令翻译成二进制指令是操作系统帮忙完成的。操作系统屏蔽了底层硬件的实现细节之后向上层提供了哪些方便易用的服务呢?用户与操作系统交互的方式1.GUI2.联机命令接口(交互式接口):类似于命令解释器中time命令。3.脱机命令接口:类似于一个程序的执行,用户将命令罗列于一个清单中,操作系统执行用户一堆的请求。4.程序接口:只能通过程序代码间接使用程序接口,在程序中通过系统调用来使用程序接口。类似于我们在程序代码中使用printf函数,这个库函数的底层实现就是一系列的系统调用。应用程序请求操作系统服务的唯一方式就是系统调用方式。

操作系统的主要发展历程

未配置操作系统的计算机系统

        人工操作阶段,用户手工输入计算机要处理的数据,程序员通过在纸带上打孔来写好自己的程序,再把纸带放到纸带机上(耗时),计算机从纸带机上来读取用户要运行的程序(也是一个比较耗时的操作),有人机矛盾。计算机处理纸带上数据就是一个快速的过程,

单道批处理系统

        通过外围机将多个纸带上的程序提前放入磁带(读写速度要比纸带要快的多)上,引入脱机输入输出技术之后计算机的资源利用率提高了,但是同一时刻只能有一道进程运行,

多道批处理系统

        产生了操作系统,用于支持多道程序并发运行,每一次往内存中读入多道程序。多道程序并发运行,共享计算机资源,但是程序一旦开始运行,用户只能等着程序完成,不能调试程序(在程序的运行过程中输入一些参数)。

分时系统

         以时间片为单位轮流的为多个用户服务,各个用户可以通过键盘,鼠标等终端与计算机进行交互,(实现了人机交互还有多个用户同时使用一台计算机)但是不能优先处理紧急事务。

实时系统

        要在严格的时限中处理完事件。

微机操作系统;嵌入式操作系统;网络操作系统;分布式操作系统比如说网络分布式系统,就是将一个大的任务拆解成许多小的任务,由处在同一个网络中的多台计算机合作完成。

操作系统的基本特征

并发:操作系统的并发性是系统中同时运行着多个程序,这些程序宏观上同时,微观上交替。对于单核CPU来说,同一时刻只能执行一个程序。易于混淆的一个概念,并行是同一时刻发生。

共享:系统中的资源可以供内存中并发执行的进程共同使用。互斥共享方式和同时共享方式。互斥:一段时间内只能允许一个进程访问该资源。比如:摄像头资源QQ微信同时视频,只能分配给其中的一个进程;同时共享:微信和QQ同时发送文件,宏观上就像是两个进程同时访问硬盘资源,从中读取数据。

并发共享是操作系统最基本的特征。

虚拟:物理上的实体变为若干逻辑上的对应物。空分复用技术:虚拟存储器;时分复用技术:虚拟处理器,既然一个程序要被分配CPU之后才能运行,那么为什么单核CPU的电脑中也能同时运行多个程序呢,因为微观上程序是交替占用CPU的,就像是虚拟存储器一样。

异步:操作系统的异步性是指操作系统中的一些任务或事件并非按照严格的顺序依赖于其他任务或事件的完成,而是可以独立执行的。换句话说,操作系统中的一些操作可以在等待其他任务完成时,不阻塞当前任务的执行,从而提高系统的效率和响应能力。

操作系统的运行机制

程序是怎么在CPU上运行的,其实就是CPU执行一条一条机器指令的过程。CPU拿到一条指令的时候是可以区分出这条指令是特权指令还是非特权指令。当CPU处于内核态的时候执行的是内核程序,可以执行特权指令,psw标志CPU状态。

应用程序:跑在操作系统之上的程序。里面不应该包含特权指令,普通程序员写的程序都是应用程序。操作系统内核,操作系统对系统资源的管理就是在操作系统内核中实现的。

内核程序:负责实现操作系统的那一批人写的内核程序。操作系统内核当中包含了操作系统的功能,并不是所有的操作系统的功能都在内核中,比如GUI。内核程序组成了操作系统内核。

特权指令:运行之后可能会影响到其他程序的运行(如内存清零指令,这些指令影响重大,只允许管理者,即操作系统内核使用),就只允许系统的管理者使用。

两种指令:CPU在生产的时候就划分了特权指令和非特权指令,因此CPU在执行一条指令之前就可以判断这条指令是特权指令还是非特权指令。

特权指令:os中特权指令只能在核心态运行

非特权指令:可以在用户态和核心态运行

两种处理机状态用来区分操作系统程序执行的是内核程序还是应用程序。

核心态 CPU中的psw中有一个二进制位表示用户态和核心态

用户态

内核态->用户态:执行一条特权指令,修改psw的标志位为“用户态”,这个动作意味着操作系统将主动让出CPU的使用权。

用户态->内核态:由“中断”引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回CPU的使用权。

两种程序

内核程序

应用程序:只能包含非特权指令

操作系统内核:是操作系统最核心的部分,由许多内核程序组成操作系统内核。

讲一个故事来理解操作系统的运行机制

一台笔记本电脑开机之后,CPU首先处于内核态,启动BIOS系统,运行内核程序(系统初始化),执行特权指令;然后用户想要运行某一个应用程序,CPU中的psw位会主动改变标志为用户态,运行应用程序,执行非特权指令,某一天一位黑客在这个应用程序中植入了一条特权指令,CPU可以区分出这是特权指令(之前已经提到过),而此时CPU是处于用户态的,不能执行特权指令,就会触发中断(就是操作系统强行夺回CPU的使用权,CPU强行变为内核态),暂停执行应用程序的代码转而执行中断处理程序(内核程序)来响应这个中断。CPU就在内核态下执行这个中断处理程序。        中断就是让操作系统内核重新夺回了CPU的使用权。

中断与异常

操作系统内核程序是整个系统的管理者。中断存在的意义,假设没有中断,一个程序上CPU运行之后就会一直运行下去,就不可能实现多道程序并发运行这件事情。

内中断:与CPU当前执行的指令有关,中断信号来源于CPU内部,当前指令是非法的(应用程序执行的时候有一条特权指令),或者指令的某些参数是非法的(整数除于零等),都会引发内中断。如果应用程序想要请求(主动)操作系统内核提供服务,就会执行一条陷入指令(特殊指令)(注意这不是特权指令)(系统调用),引发内部中断信号。1.陷入:主动请求操作系统服务2.故障(缺页故障):某一些错误条件引起,可以被操作系统内核程序修复,之后会把CPU使用权还给应用程序3.终止:一些致命错误,一般不再把使用权还给引发终止的程序(整数除于零,非法使用特权指令)。

外中断:与CPU当前执行的指令无关,中断信号来源于CPU外部,时钟中断:计算机时钟部件发出的(就像分时系统)。IO设备中断信号,打印完成等。

系统调用

什么是系统调用?

操作系统向上层提供的接口中有给用户使用的(GUI,命令接口:联机命令接口,脱机命令接口)以及给应用程序使用的(程序接口(系统调用))

系统调用和库函数的区别

现在程序员编程一般不直接使用操作系统提供的系统调用功能,而是通过使用C库函数(编程语言向上提供库函数,有时会将系统调用封装成库函数,以隐藏系统调用的一些细节,使程序员编程更加方便)。操作系统向上提供系统调用,使得上层程序能请求内核的服务。

小例子:为什么系统调用是必须的?

系统中可能出现各种各样并发出现的共享进程,比如说两个进程共享使用打印机资源,如果不加以控制,就可能随便打印(串行),解决方案就是由操作系统内核对这些共享资源进行统一的管理,用户想要使用打印机资源这种共享资源,只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理。

什么功能要用系统调用来实现?

设备管理,文件管理,进程控制,进程通信,内存管理。

凡是和共享资源有关的操作都要使用到系统调用,保证系统的稳定性和安全性。

系统调用的过程

什么是系统调用?可以用汇编语言的方式来直接请求系统调用服务,由操作系统内核对共享资源进行统一的管理,用户不是直接操纵硬件,都要经过操作系统的统一分配策略,内核会对各个请求协调处理。凡是和共享资源有关的操作都需要系统调用。操作系统向上层提供的就是系统调用功能,

        系统调用的整个过程总结起来就是传递系统调用参数,执行陷入指令(此时处于用户态),执行相应的内核处理程序处理系统调用(根据寄存器的参数来判断用户需要哪种系统调用服务)(核心态),返回应用程序。

        高级语言代码:

代码1 代码2 调用库函数(该库函数内部封装了系统调用的复杂细节) 代码4 指令5 …………

以上是应用程序(高级语言视角)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

布尔情

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值