操作系统面试总结

进程的状态及状态转换 进程间的状态转换和进程间通信方式

1、就绪状态:当进程分配到除CPU之外的所有必要资源之后,只要获得CPU,便可立即执行,就称为就绪状态。通常就绪状态的进程排成一个队列,称为就绪队列。
2、执行状态:进程获得CPU,其程序正在执行。
3、阻塞状态:正在执行的进程由于等待某事件而暂时无法继续执行时,便放弃CPU处于暂停状态,即:程序的执行受到阻塞,称为阻塞态。

这里写图片描述
                                    进程之间的状态转换图

进程间的通讯方式:

管道(pipe)及有名管道(named pipe)

管道(pipe)是一种半双工的通信方式,数据只能单向流动,而且只能在父子进程间使用。有名管道也是半双工的通信方式,运行在同一台机器上的任意两个进程间通信。

信号量(Signal)

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

消息队列(MessageQueue)

消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限的进程可以按照一定的规则向消息队列中添加新消息,对消息队列有读权限的进程可以从消息队列中读取消息。
原理:
基本思想是根据“生产者-消费者”原理,利用内存中公用消息缓冲区实现进程间的消息交换。
内存中开辟了若干消息缓冲区,用以存放消息.每当一个进程向另一个进程发送消息时,便申请一个消息缓冲区,并把已准备好的消息送到缓冲区,然后把该消息缓冲区插入到接收进程的消息队列中,最后通知接收进程.接收进程收到发送进程发来的通知后,从本进程的消息队列中摘下一消息缓冲区,取出所需的信息,然后把消息缓冲区不定期给系统.系统负责管理公用消息缓冲区以及消息的传递.
一个进程可以给若干个进程发送消息,反之,一个进程可以接收不同进程发来的消息.显然,进程中关于消息队列的操作是临界区.当发送进程正往接收进程的消息队列中添加一条消息时,接收进程不能同时从该消息队列中到出消息:反之也一样

共享内存(Shared Memory)

共享内存最有用的进程间通信方式,它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程对共享内存中数据的更新。实现共享内存需要依靠某种同步操作,如:互斥锁和信号量等。
优点:
共享内存是运行在同一台机器上的进程间通信最快的方式,因为数据不需要在不同的进程间复制。通常由一个进程创建一块内存空间,其余进程对这块内存空间进行读写。
需要解决的问题:
1、怎样提供内存空间;
2、公共内存的互斥关系由开发人员控制。

信号量(Semaphore)

主要作为进程之间以及同一种进程的不同线程之间的同步和互斥手段

套接字(Socket)

更为一般的进程间通信机制,可用于不同机器之间的进程通信。
https://blog.csdn.net/chuangsun/article/details/78008211

猜你喜欢

转载自blog.csdn.net/u011523796/article/details/79690012