1、进程和线程的区别和联系
1)进程是操作系统进行资源分配的基本单位,线程是CPU调度的基本单位
2)一个进程可以包含多个线程,线程间共享进程的所有资源,每个线程都自己的堆栈和局部变量
3)进行有自己的独立的地址空间,每启动一个进程,系统就会为它分配空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵;而线程共享进程中的数据,使用相同的地址空间,因此CPU切换一个线程的花费更低
2、进程间的通信方式
1)管道:半双工通信方式、数据单向流动、只能在父子进程间使用
2)命名管道:半双工,允许无亲缘关系进程间的通信
3)信号量:计数器,控制多个进程对共享资源的访问
4)共享内存:映射一段能被其他进程所访问的内存
5)消息队列:消息的链表,存放在内核中并由消息队列标识符标识
6)套接字:不同设备间的进程通信
7)全双工管道
3、线程间通信
同一进程的线程共享地址空间,没有通信的必要,但要做好同步/互斥,保护共享的全局变量
1)锁机制(互斥锁、条件变量、读写锁)
2)信号量机制:计数器
3)信号机制:通过通知的操作来保持线程的同步
4、同步和异步的概念
所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回,不继续执行后续操作
所谓异步,就是发出一个功能调用时,调用者在没有得到结果之前,就可以继续执行后续操作。当这个调用完成后,一般通过状态、通知和回调来通知调用者。对于异步调用,调用的返回并不受调用者控制。
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回
非阻塞调用指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回
同步是个过程,阻塞是线程的一种状态。多个线程操作共享变量时可能会出现竞争。这时需要同步来防止两个以上的线程同时进入临界区,在这个过程中,后进入临界区的线程将阻塞,等待先进入的线程走出临界区。
5、分时操作系统和实时操作系统
分时系统是指在一台主机上连接了多个终端并由此组成的系统,该系统允许多个用户同时通过自己的终端,以交互方式使用计算机,共享主机中的资源。分时操作系统最典型的例子就是UNIX和Linux,它们可以同时连接多个终端,并且每隔一段时间重新扫描进程,重新分配进程的优先级,动态分配系统资源。
实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。
6、是什么是缓冲区溢出?有什么危害?其原因是什么?
缓冲区溢出,是指计算机向缓冲区填充数据的时候超过了缓冲区的本身的容量,溢出的数据覆盖在合法的数据上
危害:1)程序崩溃,导致拒绝服务 2)跳转并执行一段恶意代码
主要的原因是程序中没有仔细检查用户输入
7、什么是死锁?死锁产生的条件?
死锁是指多个进程因抢夺资源而造成互相等待,若无外力作用,这些进程都将无法向前推进,这种现象就是死锁
死锁产生的原因:
1)系统资源的竞争:系统资源的竞争导致系统资源不足,以及资源分配不当
2)进程运行推进顺序不合适:进程在运行过程中,请求和释放资源的顺序不当
四个必要条件:
1)互斥条件:一个资源每次只能被一个进程使用
2)请求与保持:进程已经保持了一个资源,但又提出新的资源请求,而该资源已被其他进程所占有,此时请求进程被阻塞,但是对自己已经获得的资源保持不变
3)不可剥夺:进程锁所获得的资源在未使用完毕之前,不能被其他进程剥夺
4)循环等待条件:若干个进程形成收尾相接循环等待资源的关系
预防死锁(破坏四个必要条件):
资源一次性分配:(破坏请求和保持条件)
可剥夺资源:即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件)
资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)
避免死锁:在资源动态分配过程中,用某种方法防止系统进入不安全状态,从而避免死锁发生;
所谓银行家算法,是指在分配资源之前先看清楚,资源分配后是否会导致系统死锁。如果会死锁,则不分配,否则就分配。
按照银行家算法的思想,当进程请求资源时,系统将按如下原则分配系统资源:
(1) 当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程。
(2) 进程可以分期请求资源,当请求的总数不能超过最大需求量。
(3) 当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里得到资源。
(4) 当系统现有的资源能满足进程尚需资源数时,必须测试系统现存的资源能否满足该进程尚需的最大资源数,若能满足则按当前的申请量分配资源,否则也要推迟分配。
8、进程有哪几种状态?
1)就绪状态:进程已获得除处理机以外的其他所需资源,等待分配处理机资源
2)运行状态:占用处理机资源运行
3)阻塞状态:等待资源而无法继续执行的状态
9、分页和分段有什么区别?
1)段是信息的逻辑单元,它是根据用户的需要划分的,因此段对用户是可见的;
页是信息的物理单位,它是为了管理内存的方便而划分的,对用户是透明的
2)端的大小是不固定的,由它所完成的功能决定;
页的大小是固定的,由系统决定
3)段向用户提供二维地址空间;页提供一维地址空间
在端式存储管理中,将程序的地址空间划分成若干段,这样每个进程有一个二维地址(段名,段内地址)空间,
相互独立,互不干扰,没有内存碎片,大小可变;但是段的切入切出会产生外部碎片。
在页式存储管理中,页的大小固定,没有外碎片,但是可能产生内部碎片,因为一页可能填不满
10、常用的操作系统进程调度算法
1)FCFS 先来先服务 队列
2)短进程(作业)优先调度算法(SPF) 后备队列
3)优先权调度算法 FPF (非抢占式、抢占式)
4)高响应比优先调度算法
5)时间片轮转法
6)多级反馈队列调度算法 (设置多个就绪队列)
11、线程同步的几种方式
临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)
1)临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问, 如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。
2)互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享。
3)信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。
4)事 件: 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作。
12、进程的上下文切换
上下文是操作系统保持跟踪进程运行所需的状态信息,包括如下:
各种内核数据结构
当操作系统决定将控制权从当前进程转移到某个新进程时,就会就进行上下文切换,即保存当前进程的上下文,恢复新进程的上下文,然后将控制权传递到新进程,新进程就会从上次停止的地方开始
13、用户模式和内核模式
处理器通常是用某个控制寄存器中的一个模式位来提供这种功能的,该寄存器描述了进程当前享有的特权。
一个运行在内核模式的进程可以执行指令集中的任何指令,并且可以访问系统中任何存储器位置。
一个运行在用户模式的进程不允许执行特权指令,比如停止处理器,改变模式位,或者发起一个I/O操作;也不允许直接引用地址空间中内核区内的代码和数据。
进程从用户模式变为内核模式的唯一方法是通过诸如中断,故障或者陷入系统调用这样的异常,当异常发生时,控制传递到异常处理程序,处理器将模式从用户模式变为内核模式。