操作系统相关

一、进程、线程和协程

进程:一个运行的程序就是一个进程。是系统资源分配的最小单位,拥有自己独立的内存空间。既不共享堆也不共享栈;由操作系统调度

线程:调度执行的最小单位,不能独立存在,共享内存。共享堆不共享栈;由操作系统调度

协程:是一种用户态的轻量级线程,调度完全由用户控制。和线程一样,共享堆不共享栈;由程序员调度

多进程适合在CPU密集型操作,如位数多的浮点运算

多线程适合在IO密集型操作,如爬虫

二、进程间通信方式

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

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

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

4、信号量。信号量是一个计数器,可用来控制多个进程对共享资源的访问。它通常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。

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

6、共享内存。共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式

7、套接字。

管道:速度慢、容量有限
消息队列:容量收到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题。
信号量:不能传递复杂信息,只能用来同步。
共享内存:能够很容易控制容量,速度快,但要保持同步。

三、线程同步的方式

线程同步是指多个线程同时访问某资源时,采用一系列的机制以保证最多只能一个线程访问该资源。

线程同步的方式:

1、互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以可以保证公共资源不会同时被多个线程访问。

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

3、事件(信号):通过通知操作的方式来保持多线程的同步,还可以方便实现多线程的优先级比较操作。

四、进程和线程各有哪几种状态

进程

1、就绪:进程已获得除处理机以外的所需资源,等待分配处理机资源。

2、运行:占用处理机资源运行,处于此状态的进程数小于等于CPU数

3、阻塞:进程等待某种条件,在条件满足之前无法执行

线程:创建、就绪、运行、阻塞、等待、时间等待、消亡

五、堆和栈都保存什么

堆区:全局变量、静态变量、new对象

栈区:函数的参数值、局部变量

六、临界区及如何解决冲突

临界区:每个进程中访问临界资源的那段程序。每次只准许一个进程进入临界区,进入后不允许其他进程进入。

任何时候,处于临界区的进程不可多于一个。如已有进程进入自己的临界区,则其他试图进入临界区的进程必须等待。

进入临界区的进程要在有限时间内退出,以便其他进程能及时进入自己的临界区。

如果不能进入自己的临界区,就应该让出CPU,避免进程出现忙等等现象。

七、进程的调度策略

1、先来先服务(FCFS):按照作业到达后备作业队列(或进程进入就绪队列)的先后次序选择作业(或进程)。

2、短作业优先(SJF):主要用于作业调度,它从作业后备序列中挑选所需运行时间最短的作业进入主存运行。

3、时间片轮转调度算法:当某个进程执行的时间片用完时,调度程序便终止该进程的执行,并将它送到就绪队列的末尾,等待分配下一时间片再执行。然后把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。

4、高响应比优先:按照高响应比(已等待时间+要求运行时间)/要求运行时间 优先的原则,在每次选择作业投入运行时,先计算此时后备作业队列中每个作业的响应比RP。选择最大的作业投入运行。

5、优先权调度算法:按照进程的优先权大小来调度。使高优先权进程得到优先处理的调度策略称为优先权调度算法。注意:优先数越多,优先权越小。

6、多级队列调度算法:多队列调度是根据作业的性质和类型的不同,将就绪队列再分为若干个队列,所有的作业(进程)按其性质排入相应的队列中,而不同的就绪队列采用不同的调度算法。

八、什么是死锁?产生条件?如何避免?

死锁:在2个或多个并发进程中,如果每个进程持有某有资源而又都等待别的进程释放它或他们现在保持的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。

产生死锁的必要条件:
1、互斥条件:一个资源每次只能被一个进程使用。
2、不可剥夺条件:进程已获得资源,在未使用完之前,不能被强行剥夺。
3、请求和保持条件:进程请求资源而阻塞时,对已获得的资源保持不放。
4、循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系。
只要上述一个条件不成立,就不会发生死锁。

解决死锁的方法有:预防死锁、避免死锁、检测死锁、解除死锁

死锁的处理策略:鸵鸟策略、预防策略、避免策略、检测与解除死锁

九、什么是虚拟内存

虚拟内存允许执行进程不必完全在内存中。虚拟内存的基本思想是:每个进程拥有独立的地址空间,这个空间被分为大小相等的多个块,称为页(Page),每个页都是一段连续的地址。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由硬件立刻进行必要的映射;当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的命令。这样,对于进程而言,逻辑上似乎有很大的内存空间,实际上其中一部分对应物理内存上的一块,还有一些加载在内存中的对应在硬盘上。

注意,请求分页系统、请求分段系统和请求段页式系统都是针对虚拟内存的,通过请求实现内存与外存的信息置换。

十、分段和分页的区别

1、段是信息的逻辑单位,它是根据用户的需要划分的,因此段对用户是可见的 ;页是信息的物理单位,是为了管理主存的方便而划分的,对用户是透明的。

2、段的大小不固定,有它所完成的功能决定;页大大小固定,由系统决定

3、段向用户提供二维地址空间;页向用户提供的是一维地址空间

4、段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制。

十一、缓冲区溢出,危害

缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。

危害有以下两点:

(1)程序崩溃,导致拒绝服务

(2)跳转并且执行一段恶意代码

造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。

posted @ 2019-09-25 18:48  尘世中一个迷途小书童  阅读(201)  评论(0编辑  收藏  举报