第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了第 508~530 页,共 23 页)

第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/10206004.html

进程是计算机科学中最深刻、最成功的概念之一。(尽管看了书中关于进程的很多描述,我还是理解不了这句话,不是说怀疑这句话的正确性,只是自己不能理解,或许以后看得多了就能理解了)

进程和应用程序的关系

“进程的经典定义就是一个执行中的程序的示例”

那么,是否可以将它们的关系类比于 Java 中的类和对象呢?类对应于应用程序,对象对应于进程

上下文的概念

上下文是由程序正确运行所需的状态组成的。这个状态包括存放在内存中的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。

每次运行程序时,操作系统会为此创建一个新的进程,然后在这个新进程的上下文中运行程序实例。

逻辑控制流

处理器的一个物理控制流可以被多个进程共享,即一个物理控制流可以拆分为由几个不同的进程控制的、在时间上不重叠的逻辑控制流

# 待了解

物理控制流和逻辑控制流是否可以联系到 CPU 的物理核和逻辑核?

进程的三个状态

1、运行

进程要么在 CPU 上执行,要么在等待被执行且最终会被内核调度

2、停止

进程的执行被挂起(suspended),且不会被调度。当收到 SIGSTOP、SIGTSTP、SIGTTIN 或者 SIGTTOU 信号时,进程就停止,并且保持停止直到它收到一个 SIGCONT 信号,在这个时刻,进程再次开始运行。(信号是一种软件中断的形式)

3、终止

进程永远地停止了。进程回音三种原因终止:(1)收到一个信号,该信号的默认行为是终止进程,(2)从主程序返回,(3)调用 exit 函数

注:

提到的几个信号的意思如下:

# 疑问

感觉“停止”状态跟“运行”状态的等待被执行阶段是一样的,这两者之间有什么差别吗?

从 8.1 节的最后一段提到了进程被抢占即被挂起,感觉跟这里的挂起对应不起来

并发、并发流、并行、并行流、时间片、时间分片

当两个或多个逻辑流在时间上有交叉时,我们称之为并发流,这两个或多个流被称为并发地运行。

多个流并发地执行的现象被称为并发(concurrency)。一个进程和其他进程轮流运行的概念成为多任务(multitasking)。一个进程执行它的控制流的一部分的每一个时间段叫做时间片(time slice)。因此,多任务也叫做时间分片(time slicing)。

并发流的思想与流运行的处理器核数或者计算机数无关。如果两个流在时间上重叠,那么它们就是并发的,它是并发流的一个真子集。如果两个流并发地运行在不同的处理器核或者计算机上,那么我们称它们为并行流(parallel flow),它们并行地运行(running in parallel),且并行地执行。

不太明白并发与并行的区别,先记住并行流是并发流的真子集吧,并行流一定是并发流,并发流不一定是并行流。

私有地址空间

私有地址空间是进程为每个程序提供的一种假象,好像它独占地使用系统地址空间。

其实这个私有地址空间好像也叫做虚拟内存,“虚拟”,顾名思义,并不是真实的物理内存。

但是,尽管私有地址空间是假象、是虚拟的,每个进程的实际占有的空间在这个进程被终止前都是不能被其他进程读写的。从这个意义上说,这个地址空间是私有的。

内核

内核即操作系统常驻内存的部分

用户模式、内核模式

1、关于模式位

之前理解错了,之前以为设置的模式位有各种值,现在看来,好像只有两种状态,设置了和没设置
设置了就是内核模式,没设置就是用户模式

2、权限

处于用户模式的进程不能执行特权指令,比如停止处理器、改变模式位,或者发起一个 I/O 操作。也不允许用户模式中的进程直接引用地址空间中内核区内的代码和数据。任何这样的尝试都会导致致命的保护故障。反之,用户程序必须通过系统调用接口间接地访问内核代码和数据。

3、所谓的内核模式

进程从用户模式变为内核模式的唯一方法是通过异常(中断、故障或者陷入系统调用)。当异常发生时,控制传递到异常处理程序,处理器将模式从用户模式变为内核模式。处理程序运行在内核模式中,当它返回到应用程序代码时,处理器就把模式从内核模式改回到用户模式。(我的理解:即,发生异常时,进程陷入内核模式,然而此时并不会让进程随意执行指令,而是处理器根据异常处理程序来在内核模式下做特定的事)

我的一点理解,不知道对不对

用户模式和内核模式都是隶属于进程的,可以看做进程的两种身份,内核(操作系统常驻内存的部分)既可以代表进程在用户模式下运行、也可以代表进程在内核模式下运行,但并没有一个单独的内核进程,即内核在做这些事情的时候,是借助的某个进程的名义。

fork

创建子进程,关于比较难理解的一次调用、两次返回,我的理解如下:

在调用 fork 之后,子进程立刻产生,且立刻获得与父进程相同的任何东西(PID除外),那么函数的返回值肯定也是有的,但是值不同,父进程返回的是子进程的PID,子进程返回的是PID

这么看,父进程和子进程有两个值不一样,一是fork返回的值不一样,一个是PID不一样
其他的值都一样(其他的虽然是副本、是不同对象,但值一样)

进程的生命周期:

被创建 → 运行或被挂起 → 终止 → 僵死进程 → 被回收(即,不存在)

进程的回收操作一般由其父进程发起

进程组

8.5.2 小节中提到了进程组的概念,第一次听到这个概念,进程组是进程的集合,每个进程都只属于一个进程组,很多命令可以直接以进程组为操作对象,操作目标进程组中的所有哦进程

深入理解计算机系统 第八章 异常控制流 Part2 第二遍的更多相关文章

  1. 深入理解计算机系统 第八章 异常控制流 Part1 第二遍

    第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了第 500~507 页,共 8 页) 第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/101651 ...

  2. 深入理解计算机系统 第八章 异常控制流 part2

    关于进程,需要关注其提供给应用程序的两个关键抽象: 1.一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器 2.一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用内存系统 ...

  3. 深入理解计算机系统 第八章 异常控制流 part1

    本章主旨 第八章的目的是阐述清楚应用程序是如何与操作系统交互的(之前章节的学习是阐述应用程序是如何与硬件交互的) 异常控制流 异常控制流,即 ECF(exceptional contril flow) ...

  4. CSAPP:第八章 异常控制流1

    CSAPP:第八章 异常控制流1 关键点:异常 8.1 异常8.2 进程   现代系统通过使控制流发生突变来对这些情况做出反应,一般而言,我们把这些突变称为异常控制流(Exceptional Cont ...

  5. CSAPP读书笔记--第八章 异常控制流

    第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...

  6. CSAPP:第八章 异常控制流2

    CSAPP:第八章 异常控制流2 关键点:进程控制.信号 8.4 进程控制8.5 信号 8.4 进程控制   Unix提供了大量从C程序中操作进程的系统调用.8.4.1 获取进程ID  每个进程都有一 ...

  7. csapp:第八章 异常控制流ECF

    第八章 异常控制流ECF 8.1 异常 Exception graph LR E[异常Exception]-->E2[中断:异步异常] E-->E3[同步异常] E3-->陷阱 E3 ...

  8. [CSAPP笔记][第八章异常控制流][呕心沥血千行笔记]

    异常控制流 控制转移 控制流 系统必须能对系统状态的变化做出反应,这些系统状态不是被内部程序变量捕获,也不一定和程序的执行相关. 现代系统通过使控制流 发生突变对这些情况做出反应.我们称这种突变为异常 ...

  9. 深入理解计算机系统 第二章 信息的表示和处理 Part2 第二遍

    <深入理解计算机系统> 第三版 第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了 29 ~ 34 页) 第一遍对应笔记链接 https://www.cnblogs.com/s ...

随机推荐

  1. 一个“Hello World”理解JVM运行时数据区

    先上一张JVM体系结构图: 1)运行时数据区:经过编译生成的字节码文件(class文件),由class loader(类加载子系统)加载后交给执行引擎执行.在执行引擎执行的过程中产生的数据会存储在一块 ...

  2. Java学习之面试题整理

    1,java 基本数据类型有几种?哪几种?(面试题) 8种 byte short int long float double char boolean 2,int类型是几个字节?(面试题) 4字节 3 ...

  3. Web安全之url跳转漏洞及bypass总结

    0x01 成因 对于URL跳转的实现一般会有几种实现方式: META标签内跳转 javascript跳转 header头跳转 通过以GET或者POST的方式接收将要跳转的URL,然后通过上面的几种方式 ...

  4. IDA快捷键整理

    空格键 反汇编窗口切换文本跟图形 ESC退到上一个操作地址 G搜索地址或者符号 N重命名 分号键 注释 ALT+M 添加标签 CTRL+M 列出所有标签 CTRL +S 二进制段的开始地址结束地址 C ...

  5. [JZOJ5863] 【NOIP2018模拟9.11】移动光标

    Description

  6. Spring Boot项目中如何定制HTTP消息转换器

    在构建RESTful数据服务过程中,我们定义了controller.repositories,并用一些注解修饰它们,但是到现在为止我们还没执行过对象的转换--将java实体对象转换成HTTP的数据输出 ...

  7. mysql 堆注入写shell

    如果一个平台有注入点的时候可以通过写一句话拿shell 条件 1.myql 5.6.34 版本区分 2.有写的权限 3.知道绝对路径 MySQL 中 在在mysql 5.6.34版本以后 secure ...

  8. kaldi使用cvte模型进行语音识别

    操作系统 : Unbutu18.04_x64 gcc版本 :7.4.0 该模型在thch30数据集上测试的错误率只有8.25%,效果还是不错的. 模型下载地址: http://www.kaldi-as ...

  9. 04 Node.js学习笔记之模块的加载

    A文件代码: //1.require是一个方法,它的作用就是用来加载模块的 console.log("执行 B ") require('./b.js'); console.log( ...

  10. WebShell代码分析溯源(一)

    WebShell代码分析溯源(一) 一.一句话变形马样本 <?php $_GET['POST']($_POST['GET']);?> 二.代码分析 1.调整代码格式 <?php $_ ...