操作系统基础知识点总结

简介

操作系统负责管理协调硬件、软件等计算机源的工作,为上层用户、应用程序提供简单易用的服务,本质是一种系统软件;

功能目标:1、管理计算机资源:处理机、存储器、文件、设备;2、向上层提供服务:包括用户GUI和开发者的系统接口;3、硬件机器扩展;

操作系统的四大特征:

并发:两个或多个事件在同一事件间隔里发生;
共享:系统中的资源可以供内存中的多个进程共同使用;
虚拟:把一个物理存储映射成若干个虚拟逻辑存储;
异步:并发过程中的程序非同步执行结束;

发展过程

手工操作阶段-批处理-分时处理-实时操作
->网络操作系统->分布式操作系统->个人计算机

进程的中断和异常

中断机制:CPU从用户态变为内核态、操作系统夺回当前进程的CPU控制权;

中断分类:内中断(即异常、例外)、外中断(主动中断)

中断实现原理:
1、通过检查中断信号、CPU在执行指令时检查异常、执行结束后检查中断信号;
2、找到相应的中断处理程序,通过中断向量表来实现;

操作系统结构

计算机系统层次结构
操作内核必须在内核态;非内核一般是用户态;

内核是操作系统核心部分;包含功能
始终管理、中断处理、原语:原子性的操作底层硬件语句、系统资源调度;

进程概念

进程是动态的程序的依次一次执行过程;是系统进行资源分配和调度的一个独立单位;

进程的组成PCB(Process Control Block)、程序段、数据段;对于进程管理的信息都存储在PCB中;
进程控制块中的信息:

进程标识符:唯一表示一个进程,有两种:

1)外部标识符:方便用户对进程的访问,通常有数字和字母组成

2)内部标识符:方便系统对进程的访问,每一个进程有一个唯一的数字标识符。

处理机状态:(主要指的是处理机中寄存器的状态)

1)通用寄存器:又称为用户寄存器,用户的程序可以访问,用于暂存信息,一般为8~32个

2)指令计数器:存放了将要访问的下一条指令的地址。

3)程序状态字(PSW​):含有状态信息,条件码,执行方式(指在系统还是用户状态下执行),中断屏蔽标志(允不允许在执行的过程中被打断)

4)用户栈指针:每个用户进程都有系统栈,用于存放过程和系统调用参数及调用地址。

进程调度信息

1)进程状态:指明了进程的当前状态

2)进程优先级:即一个整数,用于描述进程使用CPU的优先级,数字越大,优先级越高

3)其他信息:与采用的进程调度算法有关

4)事件:指进程由执行状态变为阻塞状态所等待发生的事件。

进程控制信息

1)程序和数据的地址:由于程序段和数据段并不是常驻内存的,而是使用的时候才调入,因此需要保存其地址

2)进程同步和通信机制:

3)资源清单:一张清单列出了该进程在运行期间所需的全部资源(除了CPU资源),另一张列出了分配到该进程的资源的清单。

4)链接指针:给出了本进程(PCB)所在队列中的下一个进程的PCB的首地址。

进程控制块的组织方式:

线性方式:不重要

链接方式:类似静态链表,把具有同一状态的PCB用其中的链接字链接成一个队列
系统需要记录的进程信息:PID、用户id、分配资源、进程运行状态(包括CPU磁盘网络使用情况);

进程的特征:
动态性、并发性、独立、异步、结构;

进程组织方式:链接方式或者索引方式;即通过链表的方式、或者通过索引表的方式;

进程的控制和通信

进程的状态:创建态、就绪态、运行态、阻塞态、中止态;状态的转化通过原语实现;

创建进程:初始化PCB并分配系统资源;
新建态->就绪态:将PCB插入就绪队列,等待CPU调度;

运行态->阻塞态:找到对应PCB,保护进程运行的上下文;将PCB插入相应事件的等待序列;

阻塞->就绪态:在等待队列找到PCB,队列中移除并插入就绪列;

终止态:找到PCB,剥夺CPU、终止子进程、资源归还、删除PCB;

进程通信方式:
管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。
进程的亲缘关系通常是指父子进程关系。

命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。
消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,
但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。
它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。
它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。
因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同主机间的进程通信。

信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

进程调度算法:
1.先来先服务调度算法(FCFS)
2.短作业(进程)优先调度算法
3. 非抢占式优先权算法
4. 抢占式优先权调度算法
5.高响应比优先调度算法
6.时间片轮转法
7.多级反馈队列调度算法

线程相关

线程概念:基本的CPU执行单元、处理及分配的最小单位,可以增加并发度;
进程和线程的区别:
进程是资源分配的最小单位,线程是CPU调度的最小单位。
拥有资源上,进程是拥有资源的,线程只能访问隶属于进程的资源,自身无资源
系统开销:进程的系统开销大,线程的系统开销小;
内存分配,同一进程中的线程共享本进程程的地址空间和资源,进程间的地址空间和资源是相互独立的
一个进程崩溃后,其他进程在保护模式下不受影响,而一个线程崩溃后,进程会死掉。即多进程的健壮性比多线程好
独立的进程有程序运行的入口、顺序执行序列和程序出口,而线程不能独立执行。需要依附于应用程序中。

对于一些相关性不大的操作或需要多机分布,此时内存不共享,使用进程,使用进程。
在需要频繁创建销毁地段使用线程,需要大量使用计算。
需要多机分布,此时内存不共享,使用进程。

协程

源自(https://zhuanlan.zhihu.com/p/172471249)
当需要同时执行多项任务的时候,就会采用多线程并发执行。协程运行在线程之上,当一个协程执行完成后,可以选择主动让出,让另一个协程运行在当前线程之上。协程并没有增加线程数量,只是在线程的基础之上通过分时复用的方式运行多个协程,而且协程的切换在用户态完成,切换的代价比线程从用户态到内核态的代价小很多。

在有大量IO操作业务的情况下,我们采用协程替换线程,可以到达很好的效果,一是降低了系统内存,二是减少了系统切换开销,因此系统的性能也会提升。
在协程中尽量不要调用阻塞IO的方法,比如打印,读取文件,Socket接口等,除非改为异步调用的方式,并且协程只有在IO密集型的任务中才会发挥作用。
协程只有和异步IO结合起来才能发挥出最大的威力。

死锁

死锁是由于两个或以上的线程互相持有对方需要的资源,导致这些线程处于等待状态,无法执行。

四个条件:
互斥条件:进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。
不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。
请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被 链中下一个进程所请求。即存在一个处于等待状态的进程集合{Pl, P2, …, pn},其中Pi等 待的资源被P(i+1)占有(i=0, 1, …, n-1),Pn等待的资源被P0占有。
预防死锁的方式:
一旦出现死锁很难解决;尽量通过破坏条件的方式去预防死锁。
1.破坏“请求和保持”条件
  想办法,让进程不要那么贪心,自己已经有了资源就不要去竞争那些不可抢占的资源。比如,让进程在申请资源时,一次性申请所有需要用到的资源,不要一次一次来申请,当申请的资源有一些没空,那就让线程等待。不过这个方法比较浪费资源,进程可能经常处于饥饿状态。还有一种方法是,要求进程在申请资源前,要释放自己拥有的资源。
2.破坏“不可抢占”条件
  允许进程进行抢占,方法一:如果去抢资源,被拒绝,就释放自己的资源。方法二:操作系统允许抢,只要你优先级大,可以抢到。
  3、.破坏“循环等待”条件
  将系统中的所有资源统一编号,进程可在任何时刻提出资源申请,但所有申请必须按照资源的编号顺序(升序)提出
具体方案;
加锁顺序(线程按照一定的顺序加锁)
加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)

死锁检测(或银行家算法提前预判)

内存分配

连续的分配方式:
1、单一连续分配:一道程序在内存中,内存浪费严重
2、固定分区分配:程序变多缺点:会产生内碎片
3、动态分区分配(重点)不能消除外碎片 思想:按需分配
4、可重定位的分区分配,在动态分区分配方式上增加一个紧凑(拼接碎片)功能
以动态运行时装入方式为前提

动态分区分配算法​
首次适应算法FF
循环首次适应算法
最佳适应算法

磁盘调度算法

先来先服务算法
最短寻找事件算法
扫描算法
循环扫描算法

io

Guess you like

Origin blog.csdn.net/qq_44830792/article/details/121070295