1.进程和线程之间的区别?
答:进程拥有系统资源的最小单位;而线程是系统独立调度的基本单位。
线程依赖于进程的存在,一个进程至少有一个线程。
进程拥有自己的地址空间,而线程共享所属进程的地址空间。
进程的开销远大于线程的开销。
多线程程序只要有一个线程崩溃了,整个程序就可能会崩溃,但是多进程中的一个进程崩溃并不会导致其它进程崩溃,因为进程拥有自己独立的 地址空间,所以多进程更加健壮。
2.同一进程中的线程可以共享哪些数据?
答:进程ID和进程组ID,进程代码段,进程的公共数据,进程的当前目录,进程打开的文件描述符
线程独占哪些资源?
答:线程ID,一组寄存器的值,线程自身的栈,错误返回码(线程可能会产生不同的错误返回码,一个线程的错误返回码不应该被其他线程修改),信号屏蔽字
3.进程间的通信有哪些方式?
共享存储(在通信的两个进程之间存在一块直接访问的共享空间),消息传递(直接通信方式和间接通信方式(发送进程把消息直接发送给某个中间实体,一般我们称之为信箱)),管道通信(管道实际上就是一个固定大小的缓冲区)。
4.进程同步问题?
管程:将共享变量以及对于共享变量的操作封装起来,形成具有一定接口的功能模块,只能通过管程提供的某个过程才能访问管程中的资源,进程只能互斥的访问管程中的自资源,使用完成后必须唤醒入口等待队列中的其他进程。
管程由一下四个部分所组成:管程的名称;局部与管程内部的一组共享结构的数据说明;对于该数据结构进行操作的一组过程;初始化语句。
临界区:访问临界资源(共享和互斥,例如打印机)的那段代码
5.同步和互斥的区别?
同步 :多个进程之间因为合作关系使得进程有了先后的次序关系 ,比如A进程必须等待B进程完成之后才能开始这就是同步的例子
互斥:其实是一种特殊的同步,即在同一时刻下并不同的进程不能一起执行,比如A进程不可以和B进程一起运行这就是互斥的例子。
6.并发,并行和异步的区别?
并行:同一时刻,可以有多个进程同时运行,需要多核CPU的支持;
并发:同一时间段内,可以有多个进程依次交替的进行,但是在某一时刻内,只能有一个进程在CPU中运行,从宏观上来看是一起运行的,但是从微观上是串行运行的。
异步:多道程序运行环境允许多个程序并发执行,但由于资源有限,进程的执行并不是一帆风顺的,而是走走停停的,这种以不可预知的速度向前推进的过程就是异步性的体现。
7.进程有哪些状态?
建立,就绪,运行,堵塞,终止。
就绪态和堵塞态之间的区别就在于:就绪态中的进程目前只缺少处理机一种资源;而堵塞态中的进程缺少除了处理机之外的其他资源。
8.进程调度算法?
先来先服务,短进程优先,优先级调度算法,高响应比算法,时间片轮转调度算法,多级反馈调度算法
9.什么叫优先级反转?
高优先级的进程等待一个被低优先级 进程占用的资源,就会出现优先级反转,即低优先级较低的进程比优先级搞的进程先执行。
解决方法:(1)优先级天花板 (2)优先级继承
10.什么是僵尸进程。
一个子进程结束后,他的父进程并没有等待它(通过调用wait或者waitpid),那么这个子进程将会成为僵尸进程。
危害:占用进程号,而系统所能使用的进程号是有限的,占用内存。
11.孤儿进程
一个父进程已经结束了,但是他的子进程还是在运行,那么这个子进程将成为孤儿进程。孤儿进程会被init(进程ID为1)接管,当这些孤儿进程结束的时候由init完成状态收集工作。
12.线程同步的方式
为什么需要线程同步:线程有时候会和其他一些线程共享一些资源,当多个线程同时读写同一份共享资源的时候,可能会发生冲突,所以需要通过线程同步的方法来实现按顺序的访问共享资源。
互斥量:mutex互斥量是一个内核对象,只有拥有互斥对象的线程才能访问互斥资源的权限。
信号量semaphore:信号量对象保存了最大资源计数器和当前可用资源的数量。
事件event:允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任务。
临界区critical section:任意时刻只允许一个线程对临界资源进行访问。
互斥量和临界区有什么区别?
互斥量是可以命名的,用于程序中不同线程之间的同步;而临界区只能用于同一进程中线程的同步。创建互斥量的资源需要更多,因此临界区的优势就是速度快,节省资源。
13.什么是协程?
协程是一种用户态下的轻量级线程,协程拥有自己的寄存器和栈,协程的调度完全由用户自己控制。
协程与线程的比较
1)一个线程可以有多个协程,一个进程也可以有多个协程;
2)线程和进程都是同步机制,而协程多是异步;
3)协程可以保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。
14.什么是IO多路复用?
IO多路复用:单个进程或线程可以同时处理多个IO请求
文件描述符:索引值,指向内核为每个进程所维护的该进程打开文件的记录表。当程序打开一个现有的文件或创建一个文件的时候,内核就向进程返回一个文件描述符。内核通过文件描述符来访问文件。文件描述符指向一个文件。
水平触发:只要有一个文件描述符就绪,就会触发通知,如果用户程序没有一次性把数据读写完,下次还会通知。
边缘触发:当文件描述符从未就绪变成就绪时就会通知一次,之后就不会通知,直到再次从未就绪变成就绪(缓冲区从不可读写变成可读写)
区别:边缘触发器效率更高,减少了被重复触发的次数,函数不会返回大量用户程序可能不需要的文件描述符。
为什么边缘触发器一定要用非堵塞IO:避免由于一个文件描述符的堵塞读/堵塞写操作让其他文件描述符的任务出现饥饿状态。
15.有哪些常见的IO模型
同步堵塞IO:用户程序发起IO读写操作后,线程堵塞,直到可以开始处理数据;对资源的利用率不高。
同步非堵塞IO:发起IO请求后可以立刻返回,如果没有就绪的数据,需要不断地发起IO请求直到数据就绪;不断重复请求消耗了大量的CPU资源;
异步IO:用户型线程发出IO请求后,继续执行,由内核进行数据的读取并放在由用户指定的缓冲区内,在IO完成之后通知用户线程直接使用。
16.什么是用户态和内核态?
目的:为了限制不同程序的访问能力,防止一些程序访问其他程序的内存数据,CPU划分了用户态和内核态两个权限等级。
用户态就只能受限的访问内存,且不允许访问外围设备,没有占用CPU的能力,CPU资源可以被其他程序获取。
内核态可以访问内存中所有数据以及外围设备,也可以进行程序的切换。
所有用户程序都运行在用户态,但有时需要进行一些内核态的操作,比如从硬盘或者键盘读数据,这时就需要进行系统调用,使用陷阱指令,CPU切换到内核态,执行相应的服务,在切换回用户态并返回系统调用的结果。
17.为什么要分为用户态和内核态?
安全性,封装性,利于调度。
中断是从用户态切换到内核态的唯一方法。
18.什么是死锁?
由于系统中存在一些不可剥夺的资源,当两个或两个以上的进程占有自身的资源并且请求其他资源,导致每个进程都无法向前推进。
四个必要条件:互斥,不可剥夺,请求并保持,循环等待。
思索的处理方法:鸵鸟策略,死锁预防,死锁避免(银行家算法),死锁检测(资源有向图),死锁解除(资源剥夺,进程撤销,进程回滚,杀死进程)
19.分页和分段的区别?
页式存储,段式存储,段页式存储(先段后页,只能有一个段表)
区别:目的不同;分页的目的是管理内存,用于虚拟内存以获得更大的地址空间;分段的目的式满足用户的需要,是程序和数据可以被划分为逻辑上独立的地址空间
大小不同:短的大小不同,由其所完成的功能决定;页的大小固定,由系统决定
地址空间维度不同:分段是二维地址空间(段号+段内偏移);分页是一维地址空间(每个进程一个页表,通过一个逻辑地址就可以找到对应的物理地址)。
分段便于信息的保护和共享;分页的共享受到限制
碎片:分段没有内部碎片,会产生外碎片;分页会产生内碎片,不会产生外碎片
20.什么是虚拟内存?
利用时间和空间局部性原理,让程序获得更多的内存。优点就是让程序可以获得更多的可用内存。
21.内部碎片和外部碎片的区别?
内部碎片:已经被分配出去(能明确指出属于那个进程)却不能被利用的内存空间。
外部碎片:还没有被分配出去,但由于太小无法分配给申请内存空间的新进程的空闲区域。
22.如何进行地址空间到物理地址的映射?
内存管理单元MMU(Memory Manage Unit)管理着逻辑地址和物理地址的转换。
23.有哪些页面置换算法?
OPT(最佳页面置换算法),LRU(最近最久未使用算法),FIFO(先进先出算法),CLOCK,改进性时钟算法(访问位,修改位)
局部性原理
时间:最近访问过的页面在不久的将来还会被访问;
空间:内存中被访问的页周围的页页很可能会被访问。
24.什么是颠簸现象
颠簸就是抖动:指的是刚被换出或换入内存的页面又被换入或换出内存。,导致整个系统的使用效率极具下降
解决策略:
修改页面置换算法,降低同时运行的程序数量,终止该进程或者增加物理内存的容量
25.磁盘调度
过程:磁头(找到对应的盘面),磁道(一个盘面上的同心圆环,巡道时间),扇区(旋转时间)。为了减少寻道时间的调度算法。
目的:减少巡道时间的调度算法:先来先服务(FCFS),最短寻找时间优先(SSTF),扫描算法(SCAN),循环扫描算法(C-SCAN),LOOK,C-LOOK