操作系统杂谈-1

操作系统作为系统资源的管理者:

比如打开QQ视频聊天:

​ 1.找QQ文件的时候,逐层打开文件夹,涉及到文件管理

​ 2.打开QQ,系统会为其分配内存,涉及到内存管理

​ 3.QQ开始运行,相应的进程被CPU处理,涉及到处理器管理

​ 4.开始视频聊天,需要将摄像头资源分配给QQ进程,涉及到设备管理

操作系统为上层提供服务:

1.命令接口允许用户直接使用(命令分批处理或者交互式)

2.程序接口允许用户通过程序间接使用(系统调用)

3.图形用户接口GUI(比如通过拖拽到垃圾桶删除)

操作系统为下层实现的功能:

​ 实现对硬件机器的扩展,比如1.基于磁盘信息的抽象,管理磁盘数据2.防止程序直接与物理资源接触3.将物理资源抽象为进程,方便了多个程序在系统中同时运行

操作系统的四个特征:并发、共享、虚拟、异步。

  1. 并发:操作系统会负责协调多个程序交替运行,需要引入中断技术才能实现并发执行
  2. 共享:是指系统的资源可以供内存中多个并发执行的进程共同使用,分为互斥共享(摄像头)和同时共享(访问资源)
  3. 虚拟:把一个物理上的实体(实际存在的)变为若干逻辑上的对应物(用户感受到的)。分为时分复用(虚拟处理器)和空分复用(虚拟存储器)
  4. 异步:多个进程并发执行,由于资源有限,进程是以不可预知的速度交替执行的。

指令和代码的区别:

指令是CPU能识别、执行的最基本命令,代码通过翻译可生成机器语言指令。由于指令权限很高,因此分为特权指令和非特权指令(用户态只能执行非特权指令,内核态可以执行非特权指令,CPU中有程序状态寄存器来识别,0用户态1内核态),因此程序叶分为内核程序和用户程序(内核程序在内核空间,应用程序运行在用户空间)

内核的核心:

时钟管理(计时用于进程切换等)、中断处理、原语(最接近硬件的部分,具有原子性。有设备驱动、CPU切换等)、进程管理、存储器管理、设备管理等

大内核和微内核

(其中后三个在有些操作系统中不将其定义为内核的核心,它属于对系统资源的管理功能,这就是大内核和微内核之分,大内核代码庞大,性能快;微内核结构清晰方便维护,但需要在内核态和用户态频繁切换)

中断:

只要发生中断,就意味着需要操作系统介入(也就是从用户态到内核态)流程:比如CPU收到计时器部件发出的中断信号/或发出系统调用/或内中断信号等,然后切换为核心态对中断进行处理(因为特权指令只有内核态有权限)

  1. 用户态->内核态:通过中断实现;内核态->用户态:通过执行一个特权指令,将CPU中程序状态寄存器的标识位改为用户态

  2. 外中断的处理过程:CPU执行一个进程的多个指令,每执行完一个指令CPU都会检查是否有外部中断信号,若不存在继续执行,若存在保护进程的状态进行保存(通过状态寄存器、指令计数器等等),然后CPU根据中断信号的类型转入相应的中断处理程序(中断处理程序位于内核态

进程控制块:

每个进程被创建时,系统会为其配置一个数据结构,称之为进程控制块(PCB),用于描述进程的各个信息(包括对内存地址的映射、进程切换时信息的存储(也就是各种寄存器值)、进程号和所属用户、状态(就绪、运行、阻塞)、优先级等),PCB是进程存在的唯一标示,位于内核态。创建进程实质是创建PCB,撤销进程实质是撤销PCB

进程的组织

(也就是系统中对多个进程之间的组织):分为链接方式(按进程状态分为多个队列,系统有指向各个队列的指针)和索引方式(按照进程状态的不同建立几张索引表,系统有指向各个索引表的指针)

进程控制:

主要时实现进程状态的转换,通过原语实现。原语的特点是执行期间不可中断,运行前有关中断指令,结束后有开中断指令。在此期间外部中断信号是被忽略的。原语的功能:更新PCB的信息,将PCB插入合适的队列,分配回收资源

进程间通信:

由于进程拥有的内存地址相互独立,因此一个进程不能直接访问另一个进程的地址空间。因此操作系统为保证安全性会提供一些方法让其进行通信。

通信之共享内存:

两个进程对共享内存的访问必须互斥,操作系统负责提供共享空间和P、V操作

通信之管道:

用于连接读写进程的一个共享文件(实质就是在内存中开辟一个固定大小的缓冲区,它是一个半双工通信,同一时间段只能单向)。广义上讲同步,两端必须各有一个进程,狭义上互斥,因为一端进程写的时候另一个端不能读。数据以字符流的形式写入管道,当管道写满,write()会被阻塞,然后等待读进程取走管道变空,然后读进程阻塞。循环这个过程

线程控制块和线程切换:

也有线程控制块也有状态(就绪、阻塞、运行)。线程切换不一定进程切换,进程切换线程一定切换。

用户级线程和内核级线程。

用户级线程由程序通过线程库来实现的。所有线程管理工作由应用程序负责(包括线程切换),因此线程切换可以在用户态下完成,操作系统意识不到线程的存在。

而内核级线程的管理工作是由操作系统内核完成。因此线程调度、切换等工作都由内核负责。操作系统能看到线程的存在

对于同时支持用户级线程和内核级线程的操作系统,可采用两者组合方式,将n个用户级线程映射到m个内核级线程(n>=m),这时即使系统是四核,也最多只能有两个用户线程并行执行。(也就是说,内核级线程才是资源分配的单位)

用户级线程映射到内核级线程有几个模式:1.多对一(线程并发性低,线程切换无须到内核态,线程管理开销小) 2.一对一(线程并发性高,线程切换需要到内核态(因为涉及到内核级线程的切换),线程管理开销大) 3.多对多(集二者的优缺点)

高级调度(作业调度):

属于内存与外存之间的调度,每个作业只调入一次(调入时创建PCB),调出一次(调出时撤销PCB)。按一定原则从外存上处于后备队列的作业中挑选一个或多个作业,给他们分配内存等必要资源,并建立相应的进程,使他们获得竞争处理器的权利。(大概就是无->创建态->就绪态)

中级调度(内存调度):

也就是内存调度(详细自己想)就是决定把哪个处于挂起状态的进程重新调入内存,一个进程可能多次调入调出。暂时调到外存等待的进程状态为挂起状态,PCB不会被调到外存,而是常驻内存,只是把PCB放到挂起队列中。(这涉及到起状态模型,多了一个就绪挂起(和就绪态双向),一个阻塞挂起(和阻塞态双向),然后阻塞挂起可以到就绪挂起)(大概就是挂起态->就绪态)

低级调度(CPU调度):

也就是CPU调度(详细自己想)就是从就绪队列中选取一个进程变为运行态。它的发生频率最高(大概就是就绪态->运行态)

阻塞、就绪、运行态都在内存,而就绪挂起、阻塞挂起都在外存上

在什么时候不能进行进程间切换:

1.处理中断的过程 2. 进程在操作系统内核程序临界区中 3.原子操作过程中

临界资源

是指一个时间段只允许一个进程使用的资源,临界区是执行临界资源的代码

操作系统的性能指标

CPU利用率:指CPU忙碌时间占总时间的比

系统吞吐量:总共完成多少道作业/总共

周转时间:作业从提交系统开始到完成结束所需时间

带权周转时间:周转时间/所需时间

平均周转时间:所有作业的平均值

CPU虚拟轮转法为什么优先I/O繁忙型进程:

因为I/O设备可以和CPU并行工作,如果优先I/O繁忙型进程,更有可能让I/O设备尽早工作,资源利用率得到提高

管程:

一种高级的进程互斥、同步机制。管程是一种特殊的软件模块(类似于类),它有对应的数据结构、对数据结构进行操作的函数、初始化语句以及管程的名字。因此管程的数据只能被管程的函数所访问,一个进程只能通过调用管程的函数才能访问管程的数据,每次只允许一个进程在管程中执行某个函数。编译器负责实现各进程互斥的进入管程中的过程

同步和异步

同步:这些进程因为需要在某些位置上协调它们的工作次序而产生制约关系。而异步是多个进程并发执行,由于资源有限,进程是以不可预知的速度交替执行的。

实现进程互斥的方法:

1单标志法,2双标志先检查,3双标志后检查,4.Peterson算法

单标志法:用于两个进程之间,一个进程在访问完临界区后会把权限转交给另一个进程。有一个标志位,标志为几就允许几号进程访问临界区(缺点是一个进程想访问,另一个进程不访问,而标志位在另一个进程,这时无法继续)

双标志先检查法:设置一个布尔数组,用来标记各进程想要进入临界区的意愿。如果没有其它的进程为true,它就把自己的所在位设为true,访问完临界区再修改为false(这种访问bug特别多,因为检查过程和设置true的过程不是原子操作)

双标志后检查法:先上锁后检查,避免双标志先检查法的bug,但是又有新的bug(两个进程都true,结果都在等待)

Peterson算法:孔融让梨的思想,设置一个布尔型数组,用来标记各进程想要进入临界区的意愿,再设置一个单标志,用于优先哪个进程进入临界区。进程想要进入临界区时,会设置意愿为true,并礼让另一个 进程,把单标志设置为对方。如果对方有想进入的意愿且单标志位为对方,那么就等待,否则就进入临界区,出临界区把意愿设置为false

进程互斥的硬件实现方法:

中断屏蔽,TestAndSet(TS指令),Swap指令

中断屏蔽:就是先关中断,然后再开中断。1.它只是用于单核处理机。因为对于多核处理器来说,关中断开中断只对它所属的处理机有效,可能其它进程在另一个处理机处理。2.开关中断权限高,只适用于内核进程

Ts指令:通过硬件来实现的,执行的过程不允许被中断。(原理就是利用新旧bool,循环利用Ts函数检查新的bool是否为false,为true循环检测,为false则访问资源,访问完毕将新bool设置为false。在Ts函数中,若为true,则更新旧的为true,新的也为true,返回旧的;若为false,则更新旧的为false,新的为true,返回旧的)

信号量机制:用户进程可以通过一对原语(wait和signal)来对信号量进行操作。信号量其实就是一个变量,可以用来表示系统中某种资源的数量。分为整型信号量和记录型信号量

整型信号量;wait简易来说就是一个while循环直到变量>0,然后进行—操作,signal建立来说就是进行++操作

记录型信号量;相比整型信号量多了一个等待队列,wait就是对信号量进行- -操作,若该值小于0,就把进程从运行态转变为阻塞态。signal就是对信号量进行++操作,若信号量值小于等于0,那么就唤醒等待队列中的一个进程(也就是让进程从阻塞态变为就绪态)

转载请注明出处!!!

如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值