您的位置:首页 > 其它

进程线程的基本概念

2016-11-20 17:40 330 查看
1. 进程

用户下达运行程序的命令后,就会产生进程。同一程序可产生多个进程(一对多关系),以允许同时有多位用户运行同一程序,却不会相冲突。
进程需要一些资源才能完成工作,如CPU使用时间、内存、文件以及I/O设备,且为依序逐一进行,也就是每个CPU核心任何时间内仅能运行一项进程。


内容

一个计算机系统进程包括(或者说“拥有”)下列数据:
那个程序的可运行机器码的一个在内存的映像。
分配到的内存(通常是虚拟的一个内存区域)。内存的内容包括可运行代码、特定于进程的数据(输入、输出)、调用堆栈、堆栈(用于保存运行时运输中途产生的数据)。
分配给该进程的资源的操作系统描述符,诸如文件描述符(Unix术语)或文件句柄(Windows)、数据源和数据终端。
安全特性,诸如进程拥有者和进程的权限集(可以容许的操作)。
处理器状态(内文),诸如寄存器内容、物理内存定址等。当进程正在运行时,状态通常存储在寄存器,其他情况在内存。


状态

进程在运行时,状态(state)会改变。所谓状态,就是指进程目前的动作:
新生(new):进程新产生中。
运行(running):正在运行。
等待(waiting):等待某事发生,例如等待用户输入完成。亦称“阻塞”(blocked)
就绪(ready):排班中,等待CPU。
结束(terminated):完成运行。
各状态名称可能随不同操作系统而相异;对于单CPU系统(UP),任何时间可能有多个进程为等待、就绪,但必定仅有一个进程在运行。
2.进程控制块

进程控制块(PCB,Process Control Block),是操作系统核心中一种数据结构,主要表示进程状态。
虽各实际情况不尽相同,PCB通常记载进程之相关信息,包括:
进程状态:可以是new、ready、running、waiting或 blocked等。
程序计数器:接着要运行的指令地址。
CPU寄存器:如累加器变址寄存器堆栈指针以及一般用途寄存器、状况代码等,主要用途在于中断时暂时存储数据,以便稍后继续利用;其数量及类别因电脑架构有所差异。
CPU排班法:优先级、排班队列等指针以及其他参数。
内存管理:如页表等。
会计信息:如CPU与实际时间之使用数量、时限、账号、工作或进程号码。
输入输出状态:配置进程使用I/O设备,如磁带机
总言之,PCB如其名,内容不脱离各进程相关信息。
3.页表






Relationship between pages addressed by virtual addresses and the frames in physical memory, within a simple address space scheme. Physical memory can contain pages belonging to many processes. Pages can be paged to disk if used infrequently, or if physical
memory is full. Not all pages are in physical memory in the above diagram.

在操作系统中使用虚拟内存,每个进程会认为使用一块大的连续的内存。事实上,每个进程的内存散布在物理内存的不同区域。或者可能被调出到备份存储中(一般在硬盘)。当一个进程请求自己的内存,操作系统负责把程序生成的虚拟地址,映射到实际存储的物理内存上。操作系统在分页表中存储虚拟地址到物理地址的映射。每个映射被称为分页表项(PTE—)。


转换过程






Actions taken upon a virtual to physical address translation. Each translation is restarted if a TLB miss occurs, so that the lookup can occur correctly through hardware.

CPU的内存管理单元(memory management unit MMU)存储最近用过的映射缓存,来自操作系统分页表。被称为转译后备缓冲器(translation
lookaside buffer, TLB)。TLB是一个索引缓存。


转换失败

有两种原因导致分页表查找失败。第一种,如果该地址没有可用的转换,这意味该虚拟地址的存储器访问是无效的。这通常是程序错误导致,操作系统需要处理这个问题。现代操作系统会发送一个段错误信号给出错程序。
当物理内存中不存在这个页,也会引起分页表查找失败。如果请求的页面被调出物理内存,给其他页腾出空间,会引起这个错误。这种情况下,页被分配到存储在介质上的辅助存储,例如硬盘。(这种辅助存储,或叫备用存储,如果是一个硬盘分区或者交换文件, 经常称之为交换分区,如果是文件,叫做分区文件或页文件。)这时候,分页需要从硬盘放回到物理内存中。
当物理内存没满的时候,这是一个简单操作。页被写回物理内存,页表和转换备用缓冲会更新,指令重启。然而,当物理内存已满,一个或多个页要被调、为请求的页面腾出空间时候。页表需要更新,标识出那些在物理内存被调出的页,然后标识那些从硬盘调入物理内存的页。TLB也需要更新,包括去掉调出的页,重启指令。页的调入调出请见页置换算法。
4.线程

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix
System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
线程是独立调度和分派的基本单位。线程可以操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows
7的线程,进行混合调度。
同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符信号处理等等。但同一进程中的多个线程有各自的调用栈(call
stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。
一个进程可以有很多线程,每条线程并行执行不同的任务。
在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责IO处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: