执行模式
指令分为特权指令(只能由操作系统内核使用的指令)和非特权指令(只能由用户程序使用的指令),因为指令有特权和非特权之分,所以 CPU 也分为 2 种执行模式:系统态(可以执行所有指令,使用所有资源以及改变 CPU 状态)和用户态(只能执行非特权指令)。
CPU 的系统态和用户态之间的切换。
进程间通讯
当进程之间需要数据传输、共享数据时,进程间就需要互相通讯,通讯方式有如下几种,这里只是简单概括一下,不展开讲,咱的重点在于多线程,进程咱们简单了解一下就可以,感兴趣的同学可以根据要点进行深入学习。
管道(Pipe)
管道是半双工通讯,数据是单向流动,要建立进程间互相通讯,则需要 2 个管道,这种通讯方式只能在亲戚关系的进程间使用,比如父子进程。
流管道(Flow Pipe)
流管道是管道进化来的,数据不再是单向流动,可以双向流动,但是依旧是只能在亲戚关系的进程间使用。
有名管道(Named Pipe)
有名管道提供了新的功能,就是给管道设置名字,它改善了上面 2 种管道通讯方式,支持了非亲戚关系的进程通讯。
信号量(Semophore)
信号量相当于计数器,利用它来控制多个进程访问共享资源,当一个进程A在访问共享资源时,信号量防止其他进程来访问,只有当进程A不访问共享资源了,其他进程才能访问。
信号(Signal)
信号可以在任何时候发给某一进程,不需要知道该进程当前的状态,如果对方进程未执行,信号会存在内核中,直到进程执行后传递给它;如果对方进程是阻塞,则信号会延迟传递,等到对方进程阻塞取消后才传递给它。
消息队列(Message Queue)
消息队列是存放在内核中的链表,可以有多个进程对这个链表进行写入和读取,它解决了信号传递信息少、管道只能传输无格式字节流和缓冲区大小受限的缺点。目前有 POSIX 消息队列和 System V 消息队列。
共享内存(Shared Memory)
共享内存即为一段能被其他进程访问的内存,多个进程访问同一个内存,达到了通讯的效果。
套接字(Socket)
套接字就是我们网络编程里面的那个套接字,可以通过网络也可以在本机进行通信,它的好处在于可以跨主机进行通信。