操作系统
摘自-骏马金龙操作系统篇的学习总结
https://www.junmajinlong.com/os
并行
伪并行-并发
一般电脑通过分时系统来完成类似条同时运行多个进程的假象,其实是由于CPU在进程之间快速切换所达成的效果,如果想真正的达成这种并行的效果,则必须要使用多核CPU,一个核心可以单独执行一个进程,从而达到并行的效果
伪并行-执行过程
比如有ABC三个进程,CPU先会执行A,然后会被调度器调度执行下一个程序,A执行的时间成为时间片,切换到C的时候会保存A的上下文通俗讲就是A执行到了哪里,下次切换回来可以继续执行
进程调度器
影响进程调度器的两个重要指标有相应时间和周转时间,时间越短说明执行的越快,可以给用户更好的体验,这些任务会被优先执行
除了这些进程还有优先级,称为抢占式多任务处理,优先级越高,被CPU执行的可能越大
内核态和用户态
为啥要有两种状态?
一般可以这样区分,操作系统管理的就是内核态进程,用户管理的是用户态进程,内核态的进程拥有管理资源的最高权限,分状态总而言之就是限制用户的权限,这两种状态描述的是一个进程的工作状态
中断
中断就是改变CPU的正常执行流程,让他回到操作系统的控制
硬件中断
任何硬件都有自己的IRQ(中断请求),比如时钟中断,当进程消耗完一个时间片,即产生一个中断,让操作系统可以调度到下一个进程
硬盘IO中断,硬盘读取数据完成,即产生中断,让操作系统做后续处理
软件中断
主要涉及内核态和用户态的切换,trap和return-from-trap
系统调用(system call)
用户进程工作在用户态,它是受限的,很多涉及到硬件的都无法执行,所以它只能请求操作系统去执行,并把结果返回给用户进程
案例
理解系统调用其实很简单,比如有一个程序想要读取a.log文件(例如head -n 1 a.log),读取之前必须先打开文件,但是用户进程是没有权限打开文件的,所以用户进程只能发送一个open()的系统调用请求操作系统去帮忙打开这个文件,操作系统打开这个文件后会将打开的结果——文件描述符交给用户进程,用户进程通过这个文件描述符就能去操作这个文件。再进一步,用户进程想要从这个打开的文件中读取一行数据,用户进程是没有权限读取文件的,只能发送一个read()系统调用请求操作系统去读取这一行数据,操作系统读取这行数据后就能交给用户进程。
中断总流程
1.发起系统调用,请求操作系统帮忙执行某些操作,这会产生软中断;
2.软中断导致陷入内核,CPU控制权交给操作系统,操作系统处理中断,即执行被请求的操作;
3.如果一切正常,操作系统在完成操作后会恢复到断点处继续向下执行,这会回到用户态;
4.用户进程取得操作系统操作的成果,继续向下执行。
Idle进程
CPU执行idle的时间就是它空闲的时间,cpu在这个工作状态下,已最低能耗运行着,Idel进程的使用率代表cpu的空闲程度。
虚拟内存
每个进程都拥有属于自己的虚拟内存,内存在使用自己的虚拟地址空间的时候,任何虚拟地址都必须翻译成对应的物理内存地址才能使用到物理内存
虚拟内存的两个主要目的就是:让进程认为自己的空间随意使用和保证进程之间的安全,不会相互影响到