程序:存储在磁盘上的二进制可执行文件。
进程:一个正在运行的程序,是系统进行资源分配的基本单位。
线程:进程内部的一条执行路径,是系统进行调度的基本单位。
在操作系统中将线程的实现分为三类:用户级线程、内核级线程、混合方式
在linux下线程的实现:linux实现线程的机制非常独特。从内核的角度来说,它并没有线程这个概念。linux把所有的线程都当作进程来实现。内核并没有准备特别的调度算法或是定义特别的数据结构来表征线程。相反,线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一隶属于自己的task_struct,所以在内核中,它看起来更像是一个普通的进程(只是该进程和其他一些进程共享某些资源,如地址空间)。
注意:进程是动态的,程序一个静态的文件,进程是程序的一次实例化,一个程序可执行多次生成多个进程。
计算机五大组成部分:运算器、控制器、储存器、输入设备、输出设备。由总线连接。
进程的三种基本状态:就绪、执行、阻塞
操作系统:管理计算机上的软硬件资源,为用户提供一个交互的接口。管理进程和内存。
进程控制块(PCB):进程的所有的信息。实现:结构体。用链表管理
如何将计算机上有限的物理内存分配给多个程序使用?
存在的问题:
- 地址空间不隔离。
- 内存使用效率低。
- 程序运行的地址不确定
问题解决:
- 虚拟地址空间
- 虚拟内存。在磁盘上划分虚拟内存,运行比物理内存更大的程序。
- 分页。由操作系统选择决定页的大小。32位每页4KB.
- 重定位
为什么不连续:如果连续,每一个进程都从0页开始分配,会发生冲突。