操作系统知识拾遗

 

一、进程与线程

进程和线程都是一个CPU工作时间段的描述,只是关注点不同。

进程(Process):

资源(CPU,内存等,文件,网络等)分配的基本单位。系统中有很多进程,它们都会使用内存。为了确保内存不被其他进程使用,每个进程所能访问的内存都是分配好的,不能互相干扰。

img

线程(Thread):

CPU运行调度的基本单位,利用中央处理器去运行代码,线程必须被包含在进程中,一个进程可以有多个线程(至少有一个),这些线程有自己的资源(栈,寄存器等),其它线程可以读写这些栈内存。线程也有自己的局部存储(TLS)和当前指令指针(PC),标明下一指令执行点。

img

总结:进程像一个容器,里面有很多线程和资源,进程分这些资源让线程去执行。线程之间通信很容易,进程之间通信(IPC)需要借助其他介质,如消息队列,管道等。同一进程内的线程间切换比进程间的切换要快。

二、并行和并发

并行:计算机能同时执行两个或多个任务

并发:计算机能执行两个或多个任务,但不是同时,而是在任务间快速切换执行

并发的重点在于有处理多个任务的能力,不一定要同时;而并行的重点在于就是有同时处理多个任务的能力。

img

三、存储

硬盘:长久存放,空间大

内存:临时存储,快速随机访问

CPU缓存:CPU调用大量数据时可以避开内存,直接从缓存中调用,加快读写速度

寄存器:存在于CPU中,速度很快,数目有限,计算机做运算时,必须将数据读入寄存器才能运算

img

四、寻址

寻址空间(逻辑内存)大小,和物理内存大小没关系,32位系统为4G,64位系统为2^64(~10^19Bytes)

一个寻址的例子,p存放的是地址,*p就是把地址所指向的数据读出来,然后在赋给n

int n = *p;

编译成汇编语言后可能是下面这样,把EBX寄存器的地址所指向的数据读取出来,放在EAX寄存器里面,编译器会记住n对应的是EAX,p对应的是EBX

MOV EAX,[EBX]

分析:指针p给出一个逻辑内存的地址,逻辑内存和物理内存有对应(段机制)关系,操作系统会拿着逻辑内存地址到物理内存中去找,可能找到,也可能找不到,因为64位操作系统逻辑内存比物理内存要大,不一定能在物理内存中对应上,这个时候就会去虚拟内存中去找,虚拟内存存在于硬盘上。虚拟内存与物理内存传递数据以页(页机制)为单位,在虚拟内存中找到后就会把这个(不是一个地址的数据)数据所在的分页放到物理内存中,这个时候如果物理内存放不下,操作系统会把物理内存中不重要的数据交换出来,最后就是把物理内存中的数据取出来放到寄存器就好了。

img