5、进程/线程模型2(操作系统笔记)

五、深入理解进程概念

5.1 进程的分类

  • 1、系统进程/用户进程
    这里系统进程的优先级要高

  • 2、前台进程/后台进程
    用户一般只和前台进程交互。

  • 3、CPU密集型进程/IO密集型进程

5.2 进程层次结构

  • UNIX中是一个进程家族树的概念:init为根进程。于是如果某一个进程结束了,那么其子孙进程都必须结束。
  • Windows中的所有进程的地位都是相同的。

5.3 进程和程序的区别

  • 进程更能准确刻画并发,而程序不能
  • 程序是静态的,进程是动态的
  • 进程有生命周期的,有诞生有消亡,是短暂的;而程序是相对长久的
  • 一个程序可对应多个进程
  • 进程具有创建其他进程的功能

5.4 进程的地址空间

操作系统为每个进程分配了一个地址空间。这里我们看一个例子:


1

这个程序我们从命令行中输入数据,比如:

myval 7
myval 8

此时我们会发现虽然进程不同,但是打印出来的地址确实一样的。这里我们从进程地址空间来分析:

2

说明:上面的两个进程都有这样一个地址空间,也就是说这两个进程是在不同的地址空间上的相同的位置,所以虽然地址是一样的,但是实际上在实际内存中的地址是不一样的。

5.5 进程映像

对进程执行活动全过程的静态描述(快照)。由进程地址空间内容、硬件寄存器内容及与该进程相关的内核数据结构、内核栈组成

  • 与用户相关:进程地址空间(代码段、数据段、堆和栈、共享栈等)
  • 与寄存器相关:程序计数器、指令寄存器、程序状态寄存器、栈指针、通用寄存器等的值
  • 与内核相关:
    • 静态部分:PCB及各种资源数据结构
    • 动态部分:内核栈(不同进程在进入内核后使用不同的内核栈)

5.6 上下文切换

  • CPU硬件状态从一个进程换到另一个进程的过程称为上下文切换,其实就是运行环境的切换。
  • 进程运行时,其硬件状态保存在CPU上的寄存器中。寄存器有:程序计数器、程序状态寄存器、栈指针、通用寄存器、其他控制寄存器的值
  • 进程不运行时,这些寄存器的值保存在进程控制块中;当操作系统要运行一个新的进程时,将进程控制块中相关值送到对应的寄存器中。

六、线程

6.1 线程的引入

引入线程有三个理由:

  • 应用的需要
  • 开销的考虑
  • 性能的考虑

6.1.1 应用的需要

我们看一个例子,一个web服务器的工作方式:

  • 从客户端接收网页请求
  • 从磁盘上检索相关的网页,读入内存(此时进程是停止的,直到读取完毕)
  • 将网页返回给对应的客户端

可以看到每次从磁盘读取的时候进程都是暂停的,这样会导致性能低下。那如何提高服务器的工作效率?通常情况下是使用网页缓存的方式解决。如果没有线程的情况下的两种解决方案:

  • 一个服务进程
    这种情况下也是一种顺序编程,虽然采用了缓存机制,但是性能同样不高。而如果设置多个进程,这多个进程之间又是相互独立的,有独立的地址空间,所以不能共享信息。

  • 有限状态机
    这种方式编程模型复杂,采用非阻塞的I/O

多线程的解决方式

1

说明:这是一个多线程的web服务器的工作方式,首先读取客户端的请求,之后由分派线程将各个任务分派给工作线程,同样这里还是采用了网页缓存。于是我们可以看到一个web服务器的实现有三种方式:
2

6.1.2 开销的考虑

3

6.1.3 性能的考虑

如果有多个处理器的话,一个进程就会有多个线程同时在执行了,这样可以极大的提高运行 性能。

6.2 线程的基本概念

4

线程的属性

  • 有标识符ID
  • 有状态及状态转换-->需要提供一些操作
  • 不运行时需要保存的上下文(程序计数器等寄存器)
  • 有自己的栈和栈指针
  • 共享所在进程的地址空间和其他资源
  • 创建、撤销另一个线程(程序开始是以一个单线程方式运行的)

6.3 线程机制的实现

一般有三种实现机制:

  • 用户级线程
  • 核心级线程
  • 混合(两者结合)方法

6.3.1 用户级线程

5

说明:可以看到线程是有运行时系统管理的,在内核中只有进程表。典型例子就是UNIX:
POSIX线程库--PTHREAD
6

小结:
有点:

  • 线程切换快
  • 调度算法是应用程序特定的
  • 用户级线程可运行在任何操作系统上(只需要实现线程库)

缺点:

  • 内核只将处理器分配给进程,同一进程中的两个线程不能同时运行于两个处理器上
  • 大多数系统调用是阻塞的,因此,由于内核阻塞进程,故进程中所有线程也被阻塞。(可以在调用之前判断进行解决,如果是阻塞线程,那么就换其他线程)

6.3.2 核心级线程

7

6.3.3 混合模型

  • 线程创建在用户空间完成
  • 线程调度等在核心态完成
  • 例子如Solaris操作系统
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容