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

发布时间 2023-10-20 19:32:02作者: 20211318魏佳孟
任务详情:自学教材第11章,提交学习笔记

Part1 知识点归纳&GPT提问

知识点归纳

多任务处理

定义:在计算机技术中,多任务处理指的是同时执行几个独立的任务。
在单处理器(单CPU)系统中,一次只能执行一个任务。多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操作从一个任务切换到另一个任务。如果切换速度足够快,就会给人一种同时执行所有任务的错觉。这种逻辑并行性成为“并发”。

进程的概念

定义:进程是对映像的执行。
操作系统是一个多任务处理系统。在操作系统中,任务也称为进程。我们把执行映像定义为包含执行代码、数据和堆栈的存储区。
操作系统内核将一系列执行视为使用系统资源的单一实体。系统资源包括内存空间、I/O设备以及最重要的CPU时间。
在操作系统内核中,每个进程用一个独特的数据结构表示,叫做进程控制块(PCB)或任务控制块(TCB)。我们直接称之为PROC结构体。
其结构如下:

typedef struct proc{
    struct proc *next;
    int *ksp;
    int pid;
    int ppid;
    int status;
    int priority;
    int kstack[1024];
} PROC;

next是指向下一个PROC结构体的指针,用于在各种动态数据结构(如链表和队列)中维护PROC结构体。
ksp字段是保存的堆栈指针,当某进程放弃使用CPU时,它会执行上下文保存在堆栈中,并将堆栈指针保存在PROC.ksp中,以便以后恢复。
pid是识别一个进程的ID编号.
ppid是父进程ID编号。
status是进程的当前状态。
priority是进程调度优先级。
kstack是进程执行时的堆栈。

操作系统内核通常会在其数据区中定义有限数量的PROC结构体,表示为:PROC proc[NPROC];
在一个单CPU系统中,一次只能执行一个进程。操作系统内核通常会使用正在运行的或当前的全局变量PROC指针,指向当前正在执行的PROC。在有多个CPU的多处理器操作系统中,可能不同CPU上实时、并行执行多个进程。因此,在一个多处理器系统中正在运行的[NCPU]可能是一个指针数组。

Unix/Linux中的进程

进程来源

当操作系统启动时,操作系统内核的启动代码会强行创建一个PID=0的初始进程,即通过分配PROC结构体进行创建,初始化PROC内容,并让运行指向proc[0]。然后,系统执行P0,初始化系统硬件和内核数据结构。然后挂载一个根文件系统,使得系统可以使用文件。然后P0复刻出一个子进程P1,并把进程切换为用户模式运行P1。

INIT和守护进程

P1通常被成为INIT进程。P1开始复刻出许多子程序。P1的大部分子进程都是用来提供系统服务的,在后台运行,不与任何用户交互,成为守护进程。

登录进程

除了守护进程外,P1还复刻出了许多LOGIN进程,每个终端一个,用于用户登录。
每个LOGIN进程打开三个与自己终端相关联的文件流。这三个文件流是用于标准输入的stdin、用于标准输出的stdout和用于标准错误消息的stderr。
每个文件流都是指向进程堆区的FILE结构体指针,每个结构体记录一个文件描述符(数字)。stdin的是0,stdout是1,stderr是2。
每个LOGIN进程向stdout显示一个login:
等待用户登录。用户账户保存在/etc/passwd和/etc/shadow文件中。每个用户账户在表单的/etc/passwd文件中都有一行对应的记录:
name:x :gid:uid:description:home:program

  • name是用户登陆名
  • x是登录检查密码
  • gid是用户组ID
  • uid是用户ID
  • home是用户主目录
  • program是用户登录后执行的初始程序
    其他用户信息保存在/etc/shadow文件中。当用户尝试使用登录名和密码登录时,Linux将检查/etc/passwd文件和/etc/shadow文件(有点像PIN码这里感觉,不知道是不是),以验证用户的身份。
sh进程

当用户成功登陆时,LOGIN进程会获取用户的gid和uid,从而成为用户的进程。它将目录更改为用户的主目录并执行列出的程序。
用户进程执行sh,故用户进程通常成为sh进程。cd、退出、注销等由sh自己执行。对于每个(可执行)文件的命令,sh会复刻一个子进程,并等待子进程终止。子进程将其执行映像更改为命令文件并执行命令程序。子进程在终止时会唤醒父进程sh。除简单的命令外,sh还支持I/O重定向和通过管道连接的多个命令。

进程的执行模式

在Unix/Linux中,进程以两种不同的模式执行,即内核模式(Kmode)和用户模式(Umode)。
image
Umode进程只能通过一下三种方式进入Kmode:
(1)中断:外部设备发送给CPU信号,请求CPU服务。当在Umode下执行时,CPU中断是启用的。在发生中断时,CPU进入Kmode处理中断。
(2)陷阱:陷阱是错误条件,例如无效地址、非法指令、除以0等。CPU进入Kmode来处理错误。
(3)系统调用(syscall):是一种允许Umode进程进入Kmode以执行内核函数的机制。当某进程执行完内核函数后,它将期望结果和一个返回值返回Umode,该值通常为0(成功),-1(错误)。

编程项目:sh模拟器

带有I/O重定向的单命令
提示用户输入命令行,其形式为:

cmd arg1 arg2 arg3…argn

处理简单命令:

cmd = "cd"  : chdir(arg1) OR chdir(HOME) if no arg1;
cmd = "edit": exit(0) to terminate;

GPT提问

image
image
image
image
image

Part2 问题与解决思路

问题

SH脚本中使用相对路径时,找不到文件或目录
image

gpt解决

image

Part3 实践过程截图

type.h文件

#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];
}

image

Part4 其他

image