操作系统基础知识归纳总结整理

操作系统基础

并行和并发

并行:在同一个时刻,有多个指令在单个CPU同时执行
并发:在同一个时刻,有多个指令在单个CPU交替执行

进程和线程

进程:正在运行的软件(就是操作系统中正在运行的一个应用程序)

独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位
动态性:进程的实质是程序的一次执行过程,进程是动态产生的,动态消亡的
并发性:任何进程都可以同其他进程一起并发执行(CPU在多个进程之间进行一个动态的切换)

线程:是进程中的单个顺序控制流,是一条执行路径(就是应用程序中做的事情)

  		单线程:一个线程如果只有一条执行路径,则称为单线程程序 	
  		多线程:一个进程如果有多条执行路径,则成为多线程程序

进程和线程

进程和线程的区别

进程是资源分配的基本单位,线程是CPU调度的最小单位

一个线程只能有一个进程,一个进程可以有多个线程

进程间不会相互影响,但是一个线程如果崩溃,会导致进程与其一起崩溃

进程具有的特征:

动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生的,动态消亡的

并发性:任何进程都可以同其他进行一起并发执行

独立性:进程是系统进行资源分配和调度的一个独立单位

结构性:是由程序,数据和进程块三部分组成

进程间的通信方式:

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

2.高级管道(popen): 将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。

3.有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

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

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

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

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

8.套接字( socket ) : 套解字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

​ 比较:

​ 管道:速度慢,容量有限

​ 消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题

​ 信号量:不能传递复杂信息,只能用来同步

​ 共享内存:能够很容易控制容量,速度快,但要保持同步

线程间的通信机制

1.锁机制:互斥锁,条件变量,读写锁

  • ​ 互斥锁提供了以排他方式防止数据结构被并发修改的方法
  • ​ 读写锁允许多个线程同时读共享数据,而是对写操作是互斥的
  • ​ 条件变量可以以原子的方式进行阻塞进程,直到某个特定条件为真为止。对条件的测试实在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

2.信号量机制:包括无名信号量和命名线程信号量

3.信号机制:类似进程间的信号处理

线程同步的方式?

线程同步的方式:临界区,互斥量,信号量,事件

​ 临界区:通过对多线程的串行化来访问公共资源或者一段代码,速度快,适合控制数据访问

​ 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限

​ 信号量:它允许多个线程同一时刻访问同一资源,但是需要限制同一事件访问此资源的最大线程数目

​ 事件:通过通知操作的方式来保持多线程的同步

线程同步和互斥的区别

  1. 互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
  2. 同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。
  3. 同步其实已经实现了互斥,所以同步是一种更为复杂的互斥。
  4. 互斥是一种特殊的同步。

​ 互斥:指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排他性。

​ 同步:在互斥的基础上,通过其它机制实现访问者对资源的有序访问

​ 同步:体现的是协作性。互斥:体现的是排他性

同步机制的原则:1.空闲让进,2.忙则等待,3.有限等待,4.让权等待

总的来说,两者的区别就是:
互斥是通过竞争对资源的独占使用,彼此之间不需要知道对方的存在,执行顺序是一个乱序。
同步是协调多个相互关联线程合作完成任务,彼此之间知道对方存在,执行顺序往往是有序的。

lock与unlock方法,替换synchronized,这就是互斥锁的体现。消费者生产者模式就是同步锁的体现。

进程的调度算法有哪些?

1.先来先服务

2.短作业优先

3.时间片轮转调度算法

4.高响应比优先

5.优先权调度算法

6.多级队列调度算法

基础知识

用户态和内核态

介绍:

用户态:只能受限地访问内存地址,且不允许访问外围设备,没有占用CPU地能力,CPU资源可以被其他程序获取

内核态:可以访问内存所有数据以及外围设备,也可以进行程序的切换

为什么要分:

​ 安全性:防止用户程序恶意或者不小心破坏系统/内存/硬件资源

​ 封装性:用户程序不需要实现更加底层地代码

​ 利于调度:如果多个用户程序都在等待键盘输入,这时就需要进行调度;统一交给操作系统调度更加方便

如何从用户态切换到内核态:

​ 系统调用:比如读取命令行输入,本质上是通过中断实现的

​ 用户程序发生异常时:比如缺页异常

​ 外围设备的中断:外围设备完成用户请求的操作之后,会向CPU发出中断信号,这时CPU会处理对应的中断处理程序

僵尸进程和孤儿进程

僵尸进程:

介绍:一个子进程结束后,但他的父进程并没有等待它,那么这个子进程将成为一个僵尸进程

特点:一个死亡的进程,但是并没有销毁,放弃了几乎所有的内存空间,没有任何可执行的代码,也不能被调度,仅仅在进程表中保留一个位置,记载该进程的ID,终止状态以及资源利用信息(CPU事件,内存使用量等等)供父进程手机

危害:占用进程号,系统所能使用的进程号是有限的,占用内存

孤儿进程:

介绍:一个父进程已经结束了,但是它的子进程还在进行,那么这些子进程将称为孤儿进程

孤儿进程会被init结果,当这些孤儿进程结束时由init完成状态收集工作

虚拟内存?

介绍:每个进程拥有独立地地址空间,这个空间被分为大小相等的多个块,称为页。每个页都是一段连续的地址,这些页被映射到物理地址,但并不是所有页都必须在内存中才能运行程序。当程序运行引用到一部分在屋里内存中的地址空间时,由硬件进行必要的映射,当程序引用一部分不在屋里内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败命令

特点:对于进程而言,逻辑上似乎有很大的内存空间,实际上其中一部分对应物理内存上的一块(称为帧,通常页和帧的大小相等),还有一些没加载在内存中的对应在硬盘上。

页面置换算法:

​ FIFO先进先出算法:在操作系统中经常被用到,比如作业调度

​ LRU最近最少使用算法:根据使用时间到现在的长短来判断

​ LFU最少使用次数算法:根据使用次数来判断

​ OPT最优置换算法:理论的最优,保证置换出去的时不再被使用的页

虚拟内存的好处:

​ 在内存中可以保留多个进程,系统并发度提高

​ 解除了用户与内存之间的紧密约束,进程可以比内存的全部空间还大

分页和分段的区别?

页式存储:一种用户视角内存与物理内存相分离的内存分配管理方案。将程序的逻辑地址划分为固定大小的页。而物理内存划分为同样大小的帧。没有外碎片,但会产生内碎片

段式存储:一种符合用户视角的内存分配管理方案,将程序的地址空间划分为若干段,如代码段,数据段,堆栈段,相互独立,互不干扰

区别:

​ 目的不同:分页是由于系统管理的需要而不是用户的需要,他的信息是物理单位;分段的目的是为了能更好的满足用户的需要,他是信息的逻辑单位,它含有一组其意义相对完整的信息;

​ 大小不同:页的大小由系统固定,而段的长度却不固定,由其所完成的功能决定

​ 地址空间不同:段向用户提供二维地址空间,页面向用户提供一维地址空间

​ 信息共享:段是信息的逻辑单位,便于存储保护和信息共享,页的保护和共享受限制

​ 内存碎片:页式存储管理的优点是没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满);而段式管理的优点是没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。

I/O多路复用,怎么实现?

介绍:指单个进程/线程可以同时处理多个IO请求

实现原理:用户将想要监视的文件描述符田间道select/poll/epoll中,由内核监视,函数阻塞。一旦有文件描述符就绪(读就绪或者写就绪),或者超时(设置timeout),函数就会返回


版权声明:本文为qq_43661841原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。