操作系统 问题整理

进程和线程,以及他们的区别?

● 进程(process)是运行中的程序,是系统资源分配和调度的基本单位,实现了操作系统内的并发(多道)。
● 线程(thread)是进程的子任务,是CPU调度的基本单位,实现了进程内的并发,提高了操作系统的并发,减小系统开销。
● 进程是拥有资源的独立单位,而多个线程共享进程的全部资源,线程只拥有必不可少的所需资源。
● 线程间可以直接读写进程数据段(如全局变量)来通信,需要进程同步和互斥手段辅助,保证数据的一致性。


进程有哪几种状态?

● 就绪状态:进程已获得除处理机以外的所需资源,等待分配处理机资源;
● 运行状态:占用处理机资源运行,处于此状态的进程数小于等于CPU数;
● 阻塞状态:进程等待某种条件,在条件满足之前无法执行;
操作系统 问题整理


进程间是如何进行通信的?

● 直接通信,进程显示命名,发送进程指定向接收进程的名字发消息,一对进程间存在一个连接,可以是无向的的,但通常是双向的,缺点是编程修改困难。
● 间接通信,发送进程发送消息到端口(邮箱),接收进程接收也在端口接收消息,一端口可以多个进程共享,但会被限制至2个。

● 管道(pipe):管道是一种半双工的通信方式,数据只能单向流动。只能在具有亲缘关系的进程间使用,可以看做是一种特殊的文件。
● 命名管道(FIFO):FIFO可以在无关系的进程间使用,FIFO 有路径名与之相关联,可以看做是一种特殊的文件,存放在文件系统中。
● 消息队列:是消息的链接表,存放在内核中。它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息,对消息队列有读权限得进程则可以从消息队列中读取信息。
● 信号量(semaphore):信号量是一个计数器。主要作为进程之间及同一种进程的不同线程之间的同步和互斥手段。
● 共享内存:最有用的方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存数据的更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。
● 套接字:这是一种更为一般的进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。


线程是如何同步的?

● 互斥量(Synchronized/Lock):采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
● 信号量(Semphare):它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
● 事件信号(Wait/Notify):通过通知操作的方式来保持多线程同步,还可以方便实现多线程优先级的比较操作。


什么是死锁?死锁产生的条件?