进程和线程(单CPU)

分时操做系统:安全

         时间片:是把计算机的系统资源(尤为是 CPU时间)进行时间上的分割,每一个时间段称为一个时间片,每一个用户依次轮流使用时间片。多线程

分时技术:把处理机的运行时间分为很短的时间片,按时间片轮流把处理机分给各联机做业使用。并发

将系统处理机时间与内存空间按必定的时间间隔,轮流地切换给各终端用户的程序使用。因为时间间隔很短,每一个用户的感受就像他独占计算机同样。分时操做系统的特色是可有效增长资源的使用率。    ide

 

进程/线程(单CPU工具

进程:性能

程序自己只是数据、指令及其组织形式的描述,进程才是程序的真正执行实体。在早期面向进程设计的计算机结构中(如早期的UNIXLinux 2.4及更早的版本),进程是程序的基本执行实体;在当代面向线程设计的计算机结构中(如当代多数操做系统、Linux 2.6及更新的版本),进程是线程的容器。spa

使用者下达执行程序的命令后,就会产生进程。同一程序可产生多个进程(一对多关系),以容许同时有多位使用者执行同一程序而不产生冲突。操作系统

 

狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。线程

广义定义:进程是一个具备必定独立功能的程序关于某个数据集合的一次运行活动。它是操做系统动态执行的基本单元,在传统的操做系统中,进程既是基本的分配单元,也是基本的执行单元。设计

 

进程的概念主要有两点:

第一,进程是一个实体。每个进程都有它本身的地址空间,通常状况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量

第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操做系统执行之),它才能成为一个活动的实体,咱们称其为进程。

进程须要一些资源才能完成工做:

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

进程的切换:从正在运行的进程中回收处理器,而后再由待运行进程来占用处理器。

实质就是把进程存放在处理嚣的寄存器中的中间数据、进程状态及堆栈中的内容存放在进程的私有堆栈。让进程来占用处理嚣实质上就是把某个进程存放在私有堆栈中寄存嚣的数据再恢复处处理嚣寄存嚣中去,并把待运行进程的断点送入处理嚣的程序指针。

在切换时,一个进程存储在处理器各寄存器中的中间数据叫作进程的上下文,因此进程切换就是被停止运行进程与待运行进程上下文的切换。

         进程的状态:

1.       ready:就绪态;等待cpu时间片来运行;一个进程要想运行,他的全部条件实现得知足;例如:他所须要打开的某几个硬盘的文件,加载至内存,再分cpu时间片等;他的准备工做都作好了,就等待内核分配给他cpu时间片来运行了,这个状态就叫ready

就绪进程能够按多个优先级来划分队列。例如,当一个进程因为时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操做完成而进入就绪状态时,排入高优先级队列。

2.       running:运行态;这个进程正在cpu上运行;运行过程当中也有可能被其余进程抢占cpu,被切换出去;也可能与其余进程正常上下文切换。

3.       ready:这是另外一种ready;在运行中,cpu时间片到了;被切换出来等待下一个cpu时间片,这种状态也叫ready

4.       sleeping:睡眠态;例:1个进程被分配到5msCPU时间片,运行到2ms时须要从硬盘加载一个文件到内存中,大约须要等待30ms,那剩下的3ms也就不要了,进入睡眠态(这是由于一些外部事件未获得知足而切换出去的进程)

运行态转睡眠态分为两种类型:1)等待IO完成才能从睡眠态中醒来(uninterruptable sleeping)(2)与IO无关,程序运行过程当中本身须要终止一段时间这也是一种睡眠态(interruptable sleeping)

进程等待条件知足才能被叫醒,这种状态被称为非可中断睡眠态,如须要从硬盘上加载一个文件到内存,进程要等待文件被加载完才可被唤醒。

而可中断睡眠态可能只要等待一次键盘的输入(例如),就能够唤醒进程。

5.       stopped:中止态;不让进程运行也不让进程退出;只有等用户手动唤醒进程。例如:在前台运行进程时,按下ctrl+z组合键,便可中止该进程。

6.       zombie:僵死态;每一个进程经过系统调用来fork()自身来建立子进程,建立完之后开始时子进程与父进程指向的是同一个内存空间,直到子进程修改了一部份内容之后才会复制一份到新内存空间,拥有本身的内存空间,这叫COWcopy on write)机制;当一个子进程完成了,占用的内存资源收回来,打开的文件关闭起来,这都是由父进程来作的工做,此时子进程就处于僵死态,这是正常的僵死态,一旦父进程帮他收尸就真正结束了;非正常僵死态是子进程死的时候父进程早已死了,没有父进程为他收尸,所以进程一直存在,内存没法释放----这就叫内存泄漏!!!若是父进程先结束了子进程就成了孤儿进程(设计好的软件会在父进程结束时由父进程将子进程委托给init进程做为子进程)

若是僵死进程多的话系统上能够内存将愈来愈少!

 

线程:

         进程可以进行运算调度的最小单位。包含在进程之中,是进程实际运算的单位。一条线程指的是进程中一个单一顺序的控制流,一個进程中能够并行多个线程,每条线程并行执行不一样的任务。

同一进程中的多条线程将共享该进程中的所有系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),本身的寄存器环境(register context),本身的线程本地存储(thread-local storage)。

线程间通讯比使用进程间通讯更有效和更容易。由于进程中的全部线程共享相同的地址空间,他们不须要使用共享内存。使用互斥对象或者其余同步工具保护共享数据不被并发访问。

线程库提供的同步工具易于实现灵活而强大的同步工具。这些工具可以替换传统的进程间通讯工具,例如消息队列。管道可用做线程间通讯路径。

一个进程能够有不少线程,每条线程并行执行不一样的任务。

 

线程的状态:

         因为线程之间的相互制约,导致线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。

就绪状态:线程具有运行的全部条件,逻辑上能够运行,在等待处理机

运行状态:线程占有处理机正在运行

阻塞状态:线程在等待一个事件(如某个信号量),逻辑上不可执行。

线程的特色:

1.       轻型实体

包括程序、数据和TCB。线程的动态特性由TCB描述,TCB包括如下信息:

1)   线程状态

2)   线程不运行时,被保存的现场资源

3)   执行堆栈

4)   存放每一个线程的局部变量主存区

5)   访问同一进程中的主存和其它资源

TCB用于指示被执行指令序列的程序计数嚣、保留局部变量、少数状态参数和返回地址等的一组堆栈嚣和堆栈

2.       独立调立和分派的基本单位

线程是能独立运行的基本单位,于是也是独立调派和分派的基本单位。因为线程很是轻量级,故线程的切换很是迅速且开销小。

3.       可并发执行

在一个进程的多个线程之间,可并发执行,甚至容许在一个进程中全部线程都能并发执行;一样,不一样进程中的线程也能并发执行,充分利用和发挥了处理机与外围设备并行工做的能力。

4.       共享进程资源

在同一进程中的各个线程,均可以共享该进程所拥有的资源,这首先表如今:全部线程都具备相同的地址空间(进程的地址空间),这意味着,线程能够访问该地址空间的每个虚地址;此外,还能够访问进程所拥有的已打开文件、定时器、信号量机构等。因为同一个进程内的线程共享内存和文件,因此线程之间互相通讯没必要调用内核

进程与线程比较:

1.       进程拥有独立的地址空间和其它资源,同一进程内的线程共用相同进程上下文

2.       若一个文件有多个进程都须要访问,则该文件就会被打开屡次。而线程是共享资源的,故线程对系统资源的消耗会少些。

3.       进程间通信须要经过IPC机制,同一进程内的线程可经过共享内存和文件进行。

4.       线程上下文切换速度较快

线程的缺点:

1.       因同一进程的线程间共用进程的上下文,线程间会发生资源争用,进而引发阻塞,影响性能。

2.       同一进程的线程间共享进程内存,故任何一个线程挂掉就会形成整个进程的崩溃。

3.       线程调度时,要保存线程状态,若调度频繁,须要占用大量CPU时钟周期。

相关文章
相关标签/搜索