概念
- 内核态与用户态
- 进程切换
- 进程状态-阻塞
- 文件描述符、文件句柄
- 进程和线程
- 阻塞和非阻塞
- 同步和异步
内核空间与用户空间
操作系统和应用程序运行都需要内存,操作系统运行使用的内存是不允许应用程序使用的,这部分内存叫做内核内存。操作系统的内心是内核,为了安全,操作系统的内核内存只允许操作系统访问。
32位操作系统的内存寻址空间最大为2^32,也就是4GB,从0x00000000 到 0xFFFFFFFF
其中最高端的1GB地址为内核内存,从0xC0000000到0xFFFFFFFF,供操作系统内核使用。
剩余的3GB为用户内存,从0X00000000到0XBFFFFFFFF,供应用程序的进程使用。
进程切换
1个cpu同一时间只能处理一个进程,操作系统通过调度算法让各个进程轮流使用CPU来让程序看起来像是“并行”。然而在这个过程中就涉及到进程切换的问题,一个进程从执行状态切换到等待状态,一个进程从就绪状态切换到执行状态。
进程切换有以下几件事必须要做:
1. 保存当前进程的工作场景,将当前进程的相关信息,包括该进程所拥有的资源地址,CPU中寄存器信息等,存入当前进程的PCB中。
2. 更新PCB信息,将当前进程的状态更新
3. 从就绪队列载入一个进程,恢复该进程的工作场景
4. 更新新进程的PCB信息
进程状态-阻塞
进程在执行过程中,可能由于某些原因不能再执行下去了,这个时候就要让出CPU来做其它事情。
这时候进程的状态就要由运行状态变成阻塞状态。该进程进入系统阻塞队列,等到满足执行条件时,再转到等待就绪队列,等待CPU再次分配时间给它,它才会再次回到运行状态。
所以,进程在阻塞状态是不占用CPU资源的。
文件描述符
文件描述符fd(file discrispter),是Linux、Unix系统中的一个概念,其本质是指向一个打开文件映射的抽象概念,其表现为一个唯一的非负整数,由系统为其分配。
Windows中有个概念:句柄,文件描述符与句柄其实是一个概念,都是为了定位打开的文件在内存中的地址,只不过映射方式不一样。
进程和线程
- 进程是可以申请系统资源的最小单位,系统资源包括CPU时间和内存空间,一个CPU同一个时间只能执行一个进程的任务,其它进程处于非运行状态。
- 线程是CPU调度的最小单位,一个进程可以有若干个线程来协同完成任务,这些线程共享进程的内存空间
- 一个进程可以有多个线程同时运行,这些线程共享进程的内存空间,为了协调这些线程之间工作,不同时读写同一个内存块,需要采取线程锁、信号量等机制,防止线程争抢资源产生死锁。
- 进程是独立运行的,拥有独立的进程空间,堆栈、代码段、寄存器、内存。
参考
进程和线程 :阮一峰的博客,讲的很有意思,图文并茂,浅显易懂。
阻塞和非阻塞
- 阻塞是指进程在请求数据的时候,不继续往下执行,直到拿到了数据才继续执行后面的过程。
- 非阻塞是进程执行过程中,发出数据请求后,不等待数据到来,继续往下执行,等数据到来之后再对数据进行处理。
同步和异步
- 同步是指调用方client向server方发出请求,server收到请求后立即处理请求并返回结果,等待server返回结果之后再继续执行。
- 异步是指调用方client向server方发出请求,然后继续执行后续步骤。server方处理请求,完成之后通过回调函数等方式通知client方,client再处理。