20201220蔡笃俊《信息安全系统设计与实现》第三章学习笔记

一、任务内容

  • 自学教材第3章,提交学习笔记(10分)
  • 知识点归纳以及自己最有收获的内容 (3分)
  • 问题与解决思路(2分)
  • 实践内容与截图,代码链接(3分)
  • ...(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(2分)

二、知识点归纳以及自己最有收获的内容

(一)知识点归纳

1. 进程概念

进程是对映像的执行。

2. 进程同步

睡眠操作:

有时候,进程需要等待直到某个特定的事件发生,例如设备初始化完成、I/O 操作完成或定时器到时等。在这种情况下,进程则必须从运行队列移出,加入到一个等待队列中,这个时候进程就进入了睡眠状态。为实现休眠操作,我们可以在PROC结构体中添加一个event字段,并实现ksleep(int event)函数,使进程进入休眠状态。

唤醒操作:

有睡眠就会有唤醒。多个进程可能会进入休眠状态等待同一个事件。在这种情况下,所有这些进程都将休眠等待同一个事件值。当某个等待时间发生时,另一个执行实体(可能是某个进程或中断处理程序)将会调用kwakeup(event),唤醒正处于休眠状态等待该事件值的所有程序。如果没有任何程序休眠等待该程序,kwakeup()就不工作,即不执行任何操作。

3. 进程终止

  • 正常终止:
    进程调用 exit(value), 发出exit(value)系统调用来执行在操作系统内核中的kexit(value)
  • 异常终止:
    进程因某个信号而异常终止。

4. Unix/Linux中的进程

通过ps命令得到一个进程列表:

书上的讲解以介绍为主,深入学习可以参考这个链接:https://blog.csdn.net/qq_34934140/article/details/117306205?spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-11-117306205-blog-123932084.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-11-117306205-blog-123932084.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=16

5. I/O重定向

所谓的I/O重定向也就是让已创建的FD指向其他文件。在Unix系统中,每个进程都有STDIN、STDOUT和STDERR这3种标准I/O,它们是程序最通用的输入输出方式。C语言可以通过scanf("%s", str);从终端输入字符串,通过printf("%s\n", str);向终端输出字符串。理解I/O重定向的原理需要从Linux内核为进程所维护的关键数据结构入手。对Linux进程来讲,每个打开的文件都是通过文件描述符(FD)来标识的,内核为每个进程维护了一个文件描述符表,这个表以FD为索引,再进一步指向文件的详细信息。在进程创建时,内核为进程默认创建了0、1、2三个特殊的FD,这就是STDIN、STDOUT和STDERR。
对I/O重定向更加深入的学习可以参考这篇博客:https://www.cnblogs.com/smallxu/p/15026844.html

6.管道

管道其实我们接触的很多了。管道是用于进程交换数据的单向进程间通信通道。管道有一个读取端和一个写入端。可从管道的读取端读取写入管道写入端的数据。自从管道在最初的Unix 中首次出现以来,已经被用于几乎所有的操作系统中,有许多变体。一些系统允许双向管道,在双向管道上,数据可以双向传输。普通管道用于相关进程。命名管道是不相关进程之间的 FIFO通信通道。但是,如果管道不再有读进程,写进程必须将这种情况视为管道中断错误,并中止写入。
对于命令行的使用,我们已经很熟练了:

管道部分的深入书上也是以介绍为主,想要深入学习可以参考这个链接:https://blog.csdn.net/weixin_62029250/article/details/123321790

三、问题与解决思路

进程与程序的差别到底在那些地方?
上网查询得以解决:

  • 程序是静态的,进程是动态的:程序是存储在某种介质上的二进制代码,进程对应了程序的执行过程,系统不需要为一个不执行的程序创建进程,一旦进程被创建,就处于不断变化的动态过程中,对应了一个不断变化的上下文环境。
  • 程序是永久的,进程是暂时存在的:程序的永久性是相对于进程而言的,只要不去删除它,它可以永久的存储在介质当中。
  • 进程是程序的一次执行,而进程总是对应至少一个特定的程序:一个程序可以对应多个进程,同一个程序可以在不同的数据集合上运行,因而构成若干个不同的进程。几个进程能并发地执行相同的程序代码,而同一个进程能顺序地执行几个程序。

举个生动形象的例子,一位有一手好厨艺的计算机科学家正在为他的女儿烘制生日蛋糕。他有做生日蛋糕的食谱,厨房里有所需要的原料,在这个比喻中,做蛋糕的食谱就是程序(即用适当形式描述的算法),计算机科学家就是处理机(CPU),而做蛋糕的各种原料就是输入数据。进程就是厨师阅读食谱,取来各种原料以及烘制蛋糕等一系列动作的总和。

posted @ 2022-10-07 23:58  acacacac  阅读(65)  评论(0编辑  收藏  举报