操做系统笔记之进程与线程


背景

操做系统设计的7个主题:
1. 进程描述和控制
2. 内存管理
3. 调度
4. I/O和文件管理
5. 并发和分布式系统
6. 嵌入式系统
7. 安全linux

操做系统利用一个或多个处理器的硬件资源,为系统用户提供一组服务,还表明用户来管理辅助存储器和I/O设备。算法

CPU中断的分类:
1. 程序中断
2. 时钟中断
3. I/O中断
4. 硬件失效中断编程

DMA:直接内存存取安全

概述

典型计算机系统的三个重要接口:
1. 指令系统体系结构ISA
2. 应用程序二进制接口ABI
3. 应用程序编程接口API网络

进程

三个部分:
1. 一段可执行的程序,
2. 程序所须要的相关数据(变量,工做空间,缓冲区等),
3. 程序的执行上下文,又称进程状态。上下文包括操做系统管理进程和处理器正确执行进程所须要的全部信息,包括:数据结构

1. 处理器寄存器的内容,2. 进程的优先级

多线程技术

把执行一个应用程序的进程划分红能够同时运行的多个线程。
线程
可分派的工做单元,他包括处理器上下文环境和栈中本身的数据区域。顺序执行,而且可中断。
进程
一个或多个线程和 相关系统资源的集合。多线程

多线程切换涉及的处理器开销比不一样进程间切换开销少。并发

微软

81年基于MS-DOS开发的window 3.0, 雇佣戴夫.卡特勒89年基于VAX/VMS操做系统开发NT内核。异步

UNix

主要的内核组件的简要介绍:分布式

  • 信号(Signal):内核经过信号通知进程。

  • 系统调用(System Call):进程经过系统调用来请求系统服务。一共有几百个系统调用,能够粗略的分为6类:文件系统,进程,调度,进程间通讯,套接字和其余。

  • 进程和调度器:建立、管理、调度进程。

  • 虚拟内存

  • 文件系统

  • 网络协议

  • 字符设备驱动

  • 块设备驱动

  • 网络设备驱动

  • 陷阱和错误

  • 物理内存

  • 中断

Linux Vserver

chroot提供文件系统隔离。
chcontext分配一个新的安全上下文,提供进程隔离
chbind把产生的进程及其子进程锁定到一个特定的IP地址,提供网络隔离。
capability,提供根的隔离。

进程

进程能够惟一的表征为如下元素:

  • 标识符

  • 状态

  • 优先级

  • 程序计数器

  • 内存指针

  • 上下文数据

  • I/O状态信息

  • 记帐信息
    一个处理器在任什么时候间最多只有一个进程在执行。

进程的五个状态:
- 新建,环境准备,但未进入内存
- 就绪
- 运行
- 阻塞/等待,I/O阻塞,等待资源或另外一个进程信息
- 退出
- 针对虚拟内存的:挂起态

操做系统维护四种不一样类型的表

  • 内存 :跟踪内外存

  • I/O: I/O状态

  • 文件:文件状态,大部分状态可能由文件管理系统维护和使用

  • 进程:

Unix的进程状态

  • 用户态运行

  • 内核态运行

  • 就绪,驻留在内存

  • 睡眠,驻留在内存,等待某时间,一种阻塞态

  • 就绪,被交换

  • 睡眠,被交换

  • 被抢占 进程从内核态返回到用户态,可是被内核抢占

  • 建立

  • 僵死

Unix中有两个独特进程,进程0是系统启动时建立,预约义的数据结构,是交换进程,启动时进程0产生进程1,进程1称为初始进程。
Unix中建立进程是经过内核系统调用fork()实现的,fork请求时,系统执行如下功能:
1. 为新进程在进程表中分配一个空项。
2. 为紫禁城赋一个惟一的进程标识符
3. 声场一个父进程上下文的逻辑副本,不包括共享内存区
4. 增长父进程全部的文件的计数器
5. 把子进程置为就绪态
6. 向父进程返回子进程的进程号,对子进程返回零。

全部操做在父进程的内核态下完成。

线程

在以前提出的进程概念包含两个特色:

  • 资源全部权:一个进程包括一个存放进程映像的虚拟地址空间。

  • 调度/执行:一个进程沿着能够经过一个或多个程序的执行路径执行。一个进程具备一个执行状态和一个被分配的优先级。它是一个可被操做系统调度和分派的实体。
    为了区分这两个特色,分派的单位成为线程或轻量级进程,而拥有资源全部权的单位称为进程process或task。

多线程

指在单个进程内支持多个并发执行路径的能力。
进程是操做系统的最小调度单位,线程是CPU的最小调度单位。

线程的优势:

  • 线程建立比Unix中进程建立快10倍。

  • 终止线程比进程快

  • 线程切换比进程块

  • 县城提升了不一样执行程序间通讯的效率。进程间通讯须要内核的介入,同进程中的线程共享内存和文件。

多线程的特性在多处理器机器上才能生效,单处理器中主要简化在逻辑上完成若干项不一样功能的程序的结构。

线程的分类

线程能够分为两大类:
1. 用户级线程
2. 内核级县城

wKioL1j4XXDQ4pZdAAE1hrjvzQ8772.png-wh_50

用户级线程

有关线程管理都有应用程序完成,内核意识不到。任何应用程序均可以使用线程库pthread设计多线程程序。该程序在执行时从但县城开始运行被分配给一内核管理的进程。该程序的线程状态受限于内核进程状态。由此其线程状态也将影响进程状态。
优势:
1. 该程序全部线程在用户地址空间中,无需内核态特权,不需切换状态。
2. 自定义调度算法
3. 跨系统,可移植
缺点:
1. 线程阻塞致使进程阻塞
2. 没法使用多核性能,内核一次只把一个进程分配给一个处理器

内核级线程

全部线程管理都有内核完成。
优势:
1. 同时调度线程到多核处理器
2. 进程中一个线程堵塞时,内核能够调度该进程中另一个线程
缺点:
1. 把控制从一个线程传到同一个进程的另一个线程时,须要内核的状态切换。

多核与多线程

多处理器系统中使用线程的例子:

  • 前台和后台工做:电子表格处理,一个线程显示并读取输入,一个线程执行命令更新表格。

  • 异步处理:

  • 执行速度:在一个线程I/O被阻塞时,另一个线程能够继续运行。

Linux的进程和线程管理

Linux的进程或任务有一个task_struct数据结构表示。包含了如下信息:

  • 状态

  • 调度信息

  • 标识符

  • 进程间通讯

  • 连接

  • 时间和计时器

  • 文件系统

  • 地址空间

  • 处理器专用上下文

进程的执行状态有:

  • 运行

  • 可中断,阻塞状态,此状态等待一个事件(如I/O操做的结束),一个可用资源或另外一个进程的信号

  • 不可中断,阻塞状态,此状态等待一个硬件条件,不接受任何信号

  • 中止

  • 僵死

Linux中复制当前进程的属性建立一个新进程。使用clone命令代替fork命令建立进程。没有为线程单独定义数据结构,当两个进程共享相同的虚拟内存时,它们能够看成是一个进程中的线程。clone()调用为每一个进程建立独立的栈空间,共享同一内存空间。
当Linux内核执行进程切换时,它将检查当前进程的页目录地址是否和将被调度的进程相同,若是相同,此时上下文切换仅仅是从代码的一处跳到代码的另一处。

总结

某些操做系统区分进程和线程的概念,前者涉及资源的全部权,后者涉及程序执行。用户级的线程对操做系统是未知的,它们在用户空间的线程库建立并管理,此时线程的切换不须要状态转换,很是高效,但一个进程一次只有一个用户级线程能够执行,若是某一个线程阻塞,整个进程都被阻塞。内核级线程由内核维护,由此同一个进程中的线程能够在多个处理器上并发执行,不会被某一个线程阻塞而阻塞整个进程,但当线程切换时须要进行模式转换。

相关文章
相关标签/搜索