目录
参考源
以下知识总结于老男孩 and 路飞学城讲师博客园博文:
- 林海峰老师
- Alex老师
- Eva-J老师
- 白树明老师
为什么要操作系统
我们让计算机帮我们去执行任务,那么计算机怎么执行呢?当然是使用硬件啦。
那么对于大部分程序员来说无法了解所有操作硬件的细节,管理以及优化使用硬件
是非常繁琐的过程,这些繁琐的过程就是操作系统来完成的。
那么有了它,程序员就能从繁琐的工作中解脱出来,专心于应用软件的编写即可,
应用软件则调用操作系统提供的功能接口来间接使用硬件。
什么是操作系统
操作系统就是一个协调管理以及控制计算机硬软件资源的控制程序。
操作系统的组成
操作系统位于计算机硬件和应用软件之间,本质上也就是一个软件
操作系统由两部分组成:
- 内核
内核运行于内核态,用于管理计算机硬件资源。 - 系统调用
系统调用运行于用户态,给应用软件开发者的应用软件程序提供系统调用接口,来间接地操作计算机硬件。
操作系统的功能
- 封装了复杂的计算机硬件接口,提供了良好的系统调用接口。
- 将应用软件对硬件资源的竞争请求变得有序化。
操作系统发展史
1946年2月14日第一台计算机没有操作系统,交互的方式为:穿孔卡片
批处理操作系统
批处理操作系统又分为:
- 联机批处理
- 脱机批处理
多道程序系统
允许多个程序在内存中运行
多道程序系统的出现让OS的发展渐趋成熟
提供了
- 作业调度管理
- 处理机管理
- 存储器管理
- 外设管理
- 文件系统管理
- …
产生的背景
CPU在执行一个任务的过程中,若需要操作硬盘,则发送操作硬盘的指令,指令一旦发出,硬盘上的机械手臂滑动读取数据到内存中,这一段时间,CPU需要等待,时间可能很短,但对于CPU来说已经很长很长,长到可以让CPU做很多其他的任务,如果我们让CPU在这段时间内切换到去做其他的任务,这样CPU不就充分利用了吗。这正是多道基数产生的技术背景。
在单核下,实现并发
并发:看起来像是同时运行的
多道技术
多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如CPU)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。
- 空间复用:
将内存划分为好几个部分,每个程序对应一个部分,
每个程序拥有独立空间,这样就让数据变得更加稳定和安全 - 时空复用:
- 遇到IO切,这种情况下会提供效率
- 长时间占用CPU也切,这种情况反而会降低效率
- 硬件支持隔离
多道技术的核心
在切之前要保存当前进程的运行状态,这样就能保证
下次切回来时,基于上次切走的位置继续运行。
说明
ps:
现在的主机一般是多核,那么每个核都会利用多道技术
有4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个
cpu中的任意一个,具体由操作系统调度算法决定。
多道批处理操作系统
分时操作系统
实时操作系统
通用操作系统
一般操作系统有三种类型,多道批处理操作系统、分时操作系统、实时操作系统
那么通用操作系统为拥有以上几种的操作系统
什么是I/O
I/O操作,就是让CPU等待的操作
什么是程序
存放在外设上静态的二进制文件
什么是进程
就是在运行中的程序,进程是OS分配资源的最小单位
操作系统对进程的调度算法
- 先来先服务算法 (FCFS)
- 短作业算法
- 时间分片算法
- 多级反馈算法
什么是守护进程
主要功能就是为本地或远程用户提供服务,
每个服务程序都是由运行在后台(内存)的守护进程执行的,
守护进程在开机的时候就已经启动了,并且时刻监听前台的客户服务请求,
一旦客户发出了请求,守护进程便为他们提供服务。
也就是一个服务程序对应着一个守护进程,守护进程是服务的展现方式。
特殊的守护进程
系统初始化进程
其PID为1,是其他守护进程的父进程,也就是系统上所有的守护进程都是通过系统初始化进程来管理的。
什么是僵尸进程
每个子进程运行结束后,都有一个短暂的僵尸状态,子进程大部分资源已被释放,
还保存一些状态信息,以便让父进程知晓子进程状态,方便回收子进程,
但是如果父进程一直运行着,不结束的话,那么子进程的状态就会一直保留着,
久而久之就会降低程序运行效率。----(有害)
什么是孤儿进程
父进程结束了,而子进程还在运行。这时,子进程都由PID为1的系统初始化进程管理,
系统初始化进程逐个结束子进程的生命周期。-----(无害)
并发
雨露均沾,从宏观上看,在一个时间片段,可以看出有多个程序在同时运行(单核)
并行
同时执行,从微观上看,在一个精确的时间片刻,有多个程序在同时运行(多核)
程序的分类
- 计算密集型
- I/O密集型
同步与异步
同步与异步针对的是函数/任务的调用方式
同步就是当一个进程发起一个函数(任务)调用的时候,一直等到函数(任务)完成,而进程继续处于激活状态。
而异步情况下是当一个进程发起一个函数(任务)调用的时候,不会等函数返回,而是继续往下执行当,
函数返回的时候通过状态、通知、事件等方式通知进程任务完成。
阻塞与非阻塞
阻塞与非阻塞针对的是进程或线程
阻塞是当程序中某个操作请求不能满足的时候,那么进程就会被挂起,
也就被剥夺了CPU的执行权限,当阻塞结束后,进程不会立即执行,
操作系统会根据进程的调度算法,将进程分配到某个核上继续执行。
而非阻塞就是当操作请求不能满足时,不会阻塞当前进程,也就没有被剥夺CPU的执行权限,
继续执行以下的代码。
阻塞与同步,非阻塞与异步之间没有太多关联
例如:程序同步提交一个计算密集型任务,那么就会等任务执行完毕,但此时并没有遇到IO阻塞
因为遇到IO阻塞,就会被剥夺走CPU的执行权限,但是此时计算型任务正在CPU上运行。
程序的运行状态
程序运行过程中,会进入一下几种状态:
- 就绪 (Ready)分配到了除CPU以外的所有必须资源,等待操作系统调度开始运行
- 运行 (Running)获得到了CPU的资源,正在处理
- 阻塞 (Blocked)由于等待某个事件发生,而放弃CPU处于阻塞状态
当一个程序运行的时候,比如Python程序。Run的时候,不是直接执行的
而是处于Ready阶段,等待操作系统调度开始运行
再处于程序运行阶段,
当碰到阻塞事件(Input等),程序会处于阻塞阶段。
当解除这个状态后,程序不是立马执行,而是处于Ready就绪阶段,等待操作系统的调度继续执行
进程的创建
新的进程创建都是由一个进程执行了一个创建进程的调度而创建的
进程的结束
正常退出,自愿,例如:程序运行完毕
错误退出,自愿,例如:python3 test.py 找不到这个文件
严重错误退出,非自愿,例如:程序发生异常
被其他进程杀死,非自愿,例如:kill