首页 > 其他分享 >信息安全系统设计与实现第三章学习笔记

信息安全系统设计与实现第三章学习笔记

时间:2023-10-17 19:55:30浏览次数:28  
标签:第三章 信息安全 系统 笔记 终止 getpid 进程 多任务处理 执行

一、知识点归纳

1. 多任务处理

多任务处理是计算机系统中的重要概念,它允许系统同时执行多个任务,提高了系统资源的利用率和响应速度。在多任务处理中,有几个重要的概念和技术需要进一步了解:

  • 并发(Concurrency):并发是指多个任务在时间上重叠执行的能力。虽然在单处理器系统中一次只能执行一个任务,但通过快速切换任务的执行上下文,可以让用户感觉到多个任务在同时执行。
  • 并行(Parallelism):并行是指多个任务在不同的处理器或核心上同时执行。多处理器系统可以实现真正的并行处理,提高了系统的性能。
  • 上下文切换(Context Switching):上下文切换是从一个任务切换到另一个任务时保存和恢复任务的执行环境的过程。这是多任务处理中必不可少的操作,它确保了任务之间的独立性。
  • 操作系统的角色:操作系统在多任务处理中起着关键的作用,它负责任务的调度、资源分配、上下文切换等管理工作,以确保任务之间的合理竞争和协作。

2. 进程

进程是操作系统中的基本执行单元,每个进程都有自己的内存空间和执行环境。在进程管理中,还有一些重要的概念和操作:

  • 进程控制块(PCB):进程控制块是操作系统维护的数据结构,用于描述和管理进程的状态和信息。它包含了进程的标识符、状态、优先级、程序计数器、寄存器状态等信息。
  • 进程调度:操作系统通过进程调度算法来确定下一个执行的进程。常见的调度算法包括先来先服务(FCFS)、最短作业优先(SJF)、轮转调度(Round Robin)等。
  • 进程同步:多个进程之间需要协作和同步,以避免竞争条件和数据不一致性。信号量、互斥锁、条件变量等同步机制用于实现进程之间的协作。

3. 多任务处理系统

多任务处理系统通常由多个组件组成,包括数据结构、汇编代码、队列操作函数等。这些组件协同工作以支持多任务处理。

  • 数据结构:在多任务处理系统中,常常需要定义各种数据结构来管理进程、任务队列、事件等信息。这些数据结构用于存储和操作系统内核中的关键信息。
  • 汇编代码:汇编代码通常用于实现进程上下文切换,确保进程可以在合适的时机被调度执行。
  • 队列操作函数:队列操作函数用于管理任务队列,包括进程就绪队列、等待队列等。enqueue()函数可以按优先级将进程添加到队列中,确保高优先级任务得到及时执行。

4. 进程同步

进程同步是多任务处理中的一个重要问题,它涉及到如何协调多个进程的执行,以避免竞争和冲突。在进程同步中,有几个关键概念:

  • 睡眠模式:当一个进程需要等待某个事件发生时,它可以进入睡眠模式。这是通过将进程的状态设置为休眠,并等待事件的发生来实现的。
  • 唤醒操作:当事件发生时,另一个进程或中断处理程序可以调用唤醒函数,将等待中的进程从休眠状态唤醒,继续执行。
  • 进程终止:进程可以以正常终止或异常终止的方式结束执行。正常终止是通过调用exit()系统调用来实现的,而异常终止可能涉及信号处理。

5. 进程管理

进程管理是操作系统的核心功能之一,它包括进程创建、销毁、调度、同步等操作。在进程管理中,还有一些需要考虑的因素:

  • 进程家族树:进程可以以树状结构组织,其中父进程可以创建子进程,形成家族关系。这种组织有助于进程管理和资源隔离。
  • 进程同步函数:操作系统需要提供进程同步函数,如ksleep()和kwakeup(),以确保进程能够等待事件的发生和唤醒等待中的进程。
  • 进程终止和等待:进程可以以不同方式终止,而其他进程可以使用kwait()等待子进程的终止,并获取其终止状态。

6. Unix/Linux中的进程

Unix/Linux操作系统中的进程管理是非常重要的,它影响着系统的稳定性和性能。在Unix/Linux中,进程的管理方式包括以下关键点:

  • 进程来源:Unix/Linux系统在启动时创建一个初始进程(PID=0),然后通过复制(fork)操作创建其他进程。这些进程可以是守护进程、登录进程、用户进程等。
  • 守护进程:守护进程是在后台运行的进程,通常用于提供系统服务。它们不与用户交互,例如Web服务器、数据库服务器等。
  • 登录进程:登录进程负责

处理用户登录,每个终端通常有一个登录进程。登录进程会打开与终端相关联的文件流,如stdin、stdout、stderr。

  • sh进程:用户登录后,通常会启动一个shell进程,它负责解释和执行用户的命令。Shell进程会创建子进程来执行用户命令,然后等待子进程的终止状态。
  • 进程执行模式:进程可以以不同的执行模式运行,包括中断、陷阱和系统调用。中断和陷阱用于响应外部事件和错误条件,而系统调用用于执行内核函数。

7. 进程管理的系统调用

在Unix/Linux系统中,进程管理涉及许多系统调用,这些系统调用用于创建、销毁、管理进程。一些重要的系统调用包括:

  • fork():创建子进程,复制父进程的地址空间和状态。
  • exec():用新程序替换当前进程的地址空间,执行新程序。
  • wait():等待子进程的终止,并获取子进程的终止状态。
  • exit():终止当前进程的执行,并返回终止状态。
  • getpid():获取当前进程的PID。
  • kill():向指定进程发送信号,触发不同的处理行为。
  • pipe():创建管道,用于进程间通信。
  • dup()和dup2():复制文件描述符,用于I/O重定向。

这些系统调用构成了进程管理的基础,允许程序员编写复杂的多进程应用程序,并有效地管理进程的行为和资源。

8. I/O重定向

I/O重定向是Unix/Linux系统中的一个强大功能,它允许进程将标准输入、标准输出和标准错误输出定向到文件或其他进程。这对于处理输入和输出非常有用。

  • 文件流和文件描述符:文件流是与打开文件相关联的抽象概念,而文件描述符是在操作系统内部用于标识文件流的整数值。标准输入、标准输出和标准错误输出的文件描述符分别是0、1、2。
  • 管道和管道命令:管道是一种进程间通信机制,它允许一个进程的输出直接成为另一个进程的输入。管道命令(例如"cmd1 | cmd2")用于创建管道并连接多个进程,实现数据流的传递。

二、ChatGpt提问






三、实践及代码托管

(1)创建子进程,验证父子关系

#include <stdio.h>
#include <unistd.h> // 添加这行头文件
int main() {
    int pid;
    printf("THIS Is %d MY PARENT=%d\n", getpid(), getppid());
    pid = fork(); // fork syscall; parent returns child pid,
    if (pid) { // PARENTEXECUTES THIS PART
        printf("THIS IS PROCESS %d CHILD PID=%d\n", getpid(), pid);
    } else {    // child executes this part
        printf("this is process %d parent=%d\n", getpid(), getppid());
    }
    return 0;
}


(2)创建子进程,父子并发执行

#include <stdio.h>
#include <unistd.h> // 添加这行头文件
int main() {
    int pid = fork(); // fork a child
    if (pid) { // PARENT
        printf("PARENT %d CHILD=%d\n", getpid(), pid);
        // sleep(1);    // sleep 1 second ==> let child run next
        printf("PARENT %d EXIT\n", getpid());
    } else {
        // child
        printf("child %d start my parent=%d\n", getpid(), getppid());
        sleep(2); // sleep 2 seconds => let parent die first
        printf("child %d exit my parent=%d\n", getpid(), getppid());
    }
    return 0;
}


代码已托管至gitee,链接:https://gitee.com/wang-yuxuan333/123.git
具体详见tryfork.txt ordexe.txt

四、问题及解决

编写代码时出现未调用函数库问题,通过询问ChatGpt成功解决。

标签:第三章,信息安全,系统,笔记,终止,getpid,进程,多任务处理,执行
From: https://www.cnblogs.com/wyx235300/p/17707192.html

相关文章

  • 2023/10/17 路由器学习笔记
    路由器 pc1pingpc2环境准备:1、为pc1/pc2添加IP地址、子网掩码与网关。 2、为AR1/AR2添加ip3、配置静态路由(iproute-static) 4、检查路由表是否配置成功(iprouting-table) 5、配置成功,接下来是否可以ping通 成功!三台路由配置 1、为pc1/pc2/pc3添......
  • openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库
    openGauss学习笔记-102openGauss数据库管理-管理数据库安全-客户端接入之查看数据库连接数102.1背景信息当用户连接数达到上限后,无法建立新的连接。因此,当数据库管理员发现某用户无法连接到数据库时,需要查看是否连接数达到了上限。控制数据库连接的主要以下几种选项。全局的......
  • 学习笔记:Graph WaveNet
    GraphWaveNetforDeepSpatial-TemporalGraphModeling用于深度时空图模型的GraphWaveNet期刊:IJCAI2019作者:ZonghanWu,ShiruiPan,GuodongLong,JingJiang,ChengqiZhang论文地址:https://www.ijcai.org/Proceedings/2019/0264代码地址:https://github.com/nnzhan/Gr......
  • GPU-笔记
    GPU发展​ PC时代随着图形操作系统的出现,大量需要3D图形运算的工具软件和游戏对于浮点运算的要求急剧升高,传统的X86CPU处理器并不擅长这类任务,于是诞生了更擅长浮点运算的GPU。在这类应用中,系统会把图形渲染等任务offload到GPU上去。​ 随着神经网络研究和应用的发展......
  • 2023/10/17 学习笔记
    传输层协议tcp/udp协议TCP/IP协议族的传输层协议tcp特性1.工作在传输层2.面向连接协议3.全双工协议4.半关闭(四次挥手)5.错误检查6.将数据打包成段,排序(分片)7.确认机制8.数据恢复,重传9.流量控制,滑动窗口udp特性工作在传输层提供不可靠的网络访问非面向连接协......
  • javaweb-jsp脚本总结笔记
    1什么是JSPjsp又叫JavaserveltPage这门技术最大的特点就是,写jsp就像是再写html但是不仅可以写静态页面,而且可以内置Java代码写出动态页面,也就是说可以为用户提供动态数据。总的来说jsp=java+HTML2.JSP快速入门2.1提供对应的驱动包2.1创建对应jsp文件2.2写对应代码......
  • [学习笔记] 浏览器F12检查中应该如何判断margin的上下左右?
    如下图所示,margin上下左右四个方向分别是1px,2px,3px,4px。 而在浏览器F12检查时,margin显示如下图所示:即浏览器检查时显示的margin值,是按照上、右、下、左的顺序来的。该规律在padding也同样适用。 ......
  • EPLAN 电气设计入门学习笔记
     1.EPLAN中的结构描述符号功能面结构=功能面结构符号“=”,译为高层代号,表示系统根据功能被分为若干组成项目。产品面结构-符号“-”,表示根据产品分类,例如“-Q”表示空气开关。位置面结构+符号“+”,描述部件在系统中的位置,译为“位置代号”。器件引脚标识:例如“-H1:......
  • [学习笔记] 有关CSS响应式设计的单位
    em和rem单位:em和rem是相对于元素的字体大小计算的单位。em单位是相对于父元素的字体大小,而rem单位是相对于根元素(通常是 <html> 元素)的字体大小。em和rem单位可以用于实现相对于字体大小的自适应布局。vw和vh单位:vw和vh是视口宽度和视口高度的百分比单位......
  • React学习笔记04-JSX语法
    1.JSX语法JSX将HTML语法直接加入到JavaScript代码中,再通过翻译器转换到纯JavaScript后由浏览器执行。在实际开发中,JSX在产品打包阶段都已经编译成纯JavaScript,不会带来任何副作用,反而会让代码更加直观并易于维护。编译过程由Babel的JSX编译器实现。 2.JSX语法的......