首页 > 其他分享 >《信息安全系统设计与实现》学习笔记6

《信息安全系统设计与实现》学习笔记6

时间:2023-10-21 22:45:28浏览次数:30  
标签:char const int 信息安全 系统 笔记 学习 进程 执行

第三章 Unix/Linux进程管理

多任务处理

  • 一般来说,多任务处理指的是同时进行几项独立活动的能力。
  • 多任务处理是所有操作系统的基础。总体上说,它也是并行编程的基础。

进程的概念

  • 进程的正式定义:进程是对映像的执行。
  • 操作系统内核将一系列执行视为使用系统资源的单一实体。在操作系统内核中,每个进程用一个独特的数据结构表示,叫作进程控制块(PCB)或任务控制块(TCB)等。本书中称为PROC结构体。
    • next是指向下一个PROC结构体的指针
    • ksp字段是保存的堆栈指针
    • pid是一个进程的进程编号
    • status是当前状态
    • priority是进程调度优先级
    • kstack是进程执行时的堆栈

多任务处理系统

  • type.h文件

    • 文件定义了系统常熟和表示进程的简单PROC结构体

      #define FREE 0
      #define READY 1
      #define SLEEP 2
      #define ZOMBIE 3
      typedef struct proc
      { 
         struct proc *next;
         int *ksp;
         int pid;
         int ppid;
         int status;
         int priority;
         int kstack[SSIZE];
      }
      
  • ts.s文件

    • ts.s在32位GCC汇编代码中可实现进程上下文切换.

    • queue.c文件

      • queue.c文件可实现队列和链表操作函数。
      • enqueue() 函数按优先级将 PROC输入队列中在优先级队列中,具有相同优先级的进程按先进先出(FIFO)的顺序排序。
      • dequeue()函数可返回从队列或链表中删除的第一个元素。
      • printList()函数可打印链表元素。
  • t.c文件

    • t.c文件定义MT系统数据结构、系统初始化代码和进程管理函数。

Unix/Linux中的进程

  • 进程来源
    • 当操作系统启动时,操作系统内核的启动代码会强行创建一个PID=0初始进程。
  • INIT和守护进程
    • 当进程P1开始运行时,它将其执行映像更改为INIT程序。因此,P1通常被称为INIT进程 因为它的执行映像是init程序。P1 开始复刻出许多子进程。P1的大部分子进程都是用来提供系统服务的。它们在后台运行,不与任何用户交互。
  • 登录进程
    • 除了守护进程之外,P1还复刻了许多LOGIN进程,每个终端上一个,用于用户登录。每个LOGIN进程打开三个与自己的终端相关联的文件流。
  • sh进程
    • 当用户成功登录时,LOGIN进程会获取用户的gid和uid,从而称为用户的进程。他将目录更改为用户的主目录并执行列出的程序,通常是命令解释程序sh。
  • 进程的执行模式
    • 在Unix/Linux中进程以两种不同的模式执行,即内核模式和用户模式,简称Kmode和Umode。在每种执行模式下,一个进程有一个执行映像。

进程管理的系统调用

  • fork()

    • Usage: int pid = fork();
    • fork()创建子进程并返回子进程的pid,如果fork()失败则返回-1。
  • 进程执行顺序

    • 在folk()完成后,子进程与父进程和系统中所有其他进程竞争CPU运行时间。
  • 进程终止

    • 正常终止
      退出值0通常表示正常终止。
    • 异常终止
      内核的异常处理程序将陷阱错误类型转换为一个幻数,称为信号,将信号传递给进程,使进程终止。
  • 等待进程终止

    • 在任何时候,一个进程都可以使用int pid = wait(int *status)系统调用,等待僵尸子进程。
  • Linux中的subreaper进程

  • exec():更改进程执行映像

    • 进程可以使用exec()将Umode映像更改为不同的(可执行)文件。exec()库函数有几个成员。

      int execl(const char *path, const char *arg, ...);
      int execlp(const char *file, const char *arg,...);
      int execle(const char *path, const char *arg,..., char * const envp[]);
      int execv(const char *path, char *const argv[]);
      
  • 环境变量

    • 环境变量是为当前sh定义的变量,由子sh或进程继承。

    • 一些重要的环境变量

        SHELL=/bin/bash
        TERM=xterm
        USER=kcw
        PATH=/usr/1oca1/bin:/usr/bin:/bin:/usr/local/games:/usr/games:./
        HOME= / home /kcw
      

I/O重定向

  • sh进程有三个用于终端I/O的文件流:stdin(标准输入)、stdout(标准输出)、stderr(便准错误)。

  • 文件流I/O和系统调用

    • scanf("%s",&item);
  • 重定向标准输入

  • 重定向标准输出

管道

  • 管道是用于进程交换数据的单向进程间通信通道。

  • Unix/Linux中的管道编程

    • 在Unix/Linux中,一系列相关系统调用为管道提供支持。
      int pd[2];
      int r = pipe(pd);
  • 管道命令处理

    • cmd1 | cmd2包含一个管道命令符号“|”。
  • 命名管道

    • 在sh中,通过mknod命名创建一个命名管道:
      mknod mypipe p
    • 或在c语言中发出mknod()系统调用:
      int r = mknod("mypipe",S_IFIFO,0);

苏格拉底挑战

关于进程的苏格拉底挑战

关于进程管理的系统调用的苏格拉底挑战

遇到的问题

问题:进程管理的系统调用中,如何处理子进程的退出状态?
解决:询问GPT
GPT的回答

标签:char,const,int,信息安全,系统,笔记,学习,进程,执行
From: https://www.cnblogs.com/wjdnmx/p/17779431.html

相关文章

  • 深度学习环境搭建(Windows11)
    深度学习环境的搭建(Windows11)偶然重装了系统,在此记录下环境的恢复基本深度学习环境的搭建,包括Anaconda+CUDA+cuDNN+Pytorch+TensorRT的安装与配置。ps:显卡为RTX4060LaptopGPU1.安装Python前往Python官网https://www.python.org/getit/,下载最新版Python并安装即可。2.......
  • 【刷题笔记】91. Decode Ways
    题目Amessagecontaininglettersfrom A-Z isbeingencodedtonumbersusingthefollowingmapping:'A'->1'B'->2...'Z'->26Givena non-empty stringcontainingonlydigits,determinethetotalnumberofwayst......
  • 学习笔记6
    第三章Unix/Linux进程管理3.1——3.2多任务处理、进程多任务处理:多任务处理指的是机器同时进行几项独立活动的能力。在计算机技术中,多任务处理是通过在不同任务之间切换实现的。虽然在一个时间点,CPU只能执行一个任务,但是通过快速的切换,就会给人一种同时执行所有任务的错觉。这......
  • 学习笔记6(第三章)
    一、知识点归纳(一)知识点内容教材学习内容总结本章主要讨论Unix/Linux中的进程管理。讲述了多任务处理,以及进程的相关知识:进程的概念;进程创建、终止。还讲到了Unix/Linux进程管理的系统调用:fork()wait()exec()exit()第一节:多任务处理在计算机技术中,多任务处理指的是同时执......
  • 提高组算法-图论学习笔记
    ##2023-10-21第一节基本概念      一、什么是图:点用边连起来就叫做图,是一种数据结构。二、图的一些定义和概念1、有向图:图的边有方向,只能按箭头方向从一点到另一点。  2、无向图:图的边没有方向,可以双向。3、结点的度:无向......
  • 学习一年java思想总结
    如果你迷茫不妨看看我的思想总结java这门语言是一门非常厉害的,期初我是学python的越往后学,我就感觉不是特别喜欢。然后某天晚上我打开以前的java的一个简单项目。突然就喜欢上了,下定决心去学java。我先开始学的java基础。还是那就话java入门简单深入难,刚开始学基础语法......
  • 范里安微观经济学第九版学习笔记
      浅浅分享以记录自己的学习步骤,挑战自己的认知。......
  • esp32笔记[8]-rust的定时器中断点灯
    摘要使用rust开发esp32c3实现定时器中断点亮led灯.超链接esp32笔记[7]-使用rust+zig开发入门平台信息esp32c3rustMutex锁usecore::cell::RefCell;usecritical_section::Mutex;//no-std库专用的Mutex我们首先注意到的是静态变量BUTTON。我们需要它,因为在中断处理程......
  • 动手学深度学习--第三方库的学习
    frompixivPandasCreating,ReadingandWritingpandas中有两类实体类:theDataFrameandtheSeries.DataFrameADataFrameisatable.SeriesASeries,bycontrast,isasequenceofdatavalues.一般我们在读取的时候都是用DataFrame类进行装载数据ind......
  • windows下的深度学习环境软件版本(cuda/cudnn/pytorch)
    为了方便多个深度学习框架的环境配置,推荐使用anoconda进行搭建。1.anaconda/miniconda下载地址anacoonda官方下载地址:FreeDownload|Anacondaminiconda官方下载地址: LatestMinicondainstallerlinksbyPythonversion—minicondadocumentation清华镜像源的下载地......