进程:是程序执行的一次过程,分配和管理资源的基本单位,每个进程都有一个自己的地址空间。
线程:是Cpu调度和分配的基本单位,可同一个进程的其他线程共享全部资源。
关系:线程是进程的一部分,一个线程只能属于一个进程,一个进程可以有多个线程。(至少一个)
资源:指的是Cpu、内存、文件、网络等
根本区别:进程是操作系统资源的基本单位,而线程是任务调度和执行的基本单位
开销方面:每个进程都有独立的代码和数据空间,进程间切换开销较大。同一类线程共享代码段和数据空间,每个线程也有自己独立的运行栈和程序计数器,线程之间切换开销小
内存分配:操作系统在程序运行过程中为其分配内存空间。除cpu外不会为线程,分配内存,所需资源来源于进程,线程组之间只能共享资源。
进程间通信方式:
- 1.管道:内核中维护的一段内存,有名管道(只能在父子进程中通信),无名管道(非父子进程中都能通信)
- 2.信号量:通过同步和互斥来使通信
- 3.消息队列:内核维护的一个FIFO,往队列中放入消息,在往队列中拿出消息
- 4.共享内存:大片数据映射到同一片内存,一个编码,一个解码
线程间通信方式
- 互斥量+条件变量:
Linux的虚拟内存详解:
虚拟内存:为了运行比实际物理内存大的程序而产生的。
虚拟内存大小:取决于cpu最大寻址能力,也就是计数器的字长,32位机,能访问到2的32次方,即4G。
程序的特点是,总有稳定运行一小部分程序。
将要运行的那段从辅存复制到内存中,即换入,反之换出
虚拟地址空间与物理地址空间如何进行映射:页表
虚拟内存空间有个管理虚拟地址的叫页,物理内存管理地址的叫页框
将页表和框对应起来:映射处理器。实现虚拟地址和物理地址的访问
来自:
https://blog.csdn.net/qq_38410730/article/details/81036768?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
内存映射机制:将虚拟内存与物理内存对应起来
fork
mmap
创建新的虚拟地址内存空间,并将磁盘对象映射到新建的虚拟地址空间