一.内存管理
二.进程管理
1.进程与线程
- 概念:
进程:运行中的程序
线程是进程中的一条执行流程 - 内存结构
- 进程:PCB
PCB是进程存在的唯一标识,每个PCB通过链表的方式进行组织,将具有相同状态的进程链在一起,组成各种队列(就绪队列和阻塞队列) - 线程:TCB
- 进程:PCB
- 比较
- 进程是资源分配单位,线程是CPU调度单位
- 进程拥有一个完整的资源平台,线程只独享必不可少的资源,比如栈和寄存器
- 当进程中的一个崩溃,整个进程全部崩溃
- 线程能减少并发执行的时间和空间开销
- 线程创建比进程要更快。因为进程需要资源管理,线程则是共享他们
- 线程的终止时间相比进程快。因为释放的资源少
- 线程具有相同的地址空间。因为同一个进程里的线程有同一个页表,切换的时候不用切换页表,而进程之间的切换是需要切换页表的
- 因为同一个进程里的线程共享内存和文件资源,所以在线程之间数据传递不需要经过内核,效率高
2.进程间的通信
管道
只能单向流动,只能承载无格式的字节流- 匿名管道
只能在父子进程关系中用 - 命名管道
可以在不关联的两个进程之间用。因为他创建了一个类型为管道的设备文件,使用这个设备文件就可以通信。
- 匿名管道
信号
信号是进程之间唯一的异步通信机制,信号的主要来源主要有硬件来源(入键盘操作ctrl + C) 和软件来源(如kill命令),信号传递的信息比较少,主要用于通知进程某个时间已经发生。比如利用kill pid,可以让系统优雅停机。信号量
信号量是一个计数器,可以用来控制多个进程对资源的访问,通常作为一种锁机制,防止某个进程正在访问共享资源,其他进程也访问资源消息队列
消息队列克服了信号传递信息少、管道只能承载无格式的字节流,消息到了就放进去,需要的时候去取。与命名管道相比:消息队列的优势在于,它独立于发送和接收线程,消除了在同步命名管道的打开和关闭时可能产生的一些困难。共享内存
共享内存就是映射一段能被进程之间共享的内存,这段内存由一个进程创建,但是多个进程都可以共享访问,是最快的一种进程间通信的方式(不需要从用户态到内核态的切换),它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。socket
socket套接字,不仅仅可以用于本地进程通信,还可以用于不通主机进程之间的通信。