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

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

时间:2023-10-20 19:33:07浏览次数:30  
标签:int 信息安全 用户 笔记 学习 进程 执行 PROC CPU

任务详情:自学教材第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

标签:int,信息安全,用户,笔记,学习,进程,执行,PROC,CPU
From: https://www.cnblogs.com/wjmbk123/p/17777858.html

相关文章

  • Java学习之路(一)
    Java学习之路(一)Java基础语法1、注释注释是对代码的解释和说明的文字,可以提高程序的可读性。Java的注释分为三种:单行注释。//这是单行注释多行注释。/* 这是多行注释*/注意:多行注释不能嵌套使用。文档注释。/** 文档注释以/**开始, 以*/结束*/2、关键字关键字是......
  • Pytorch深度学习环境配置 | NVIDIA-driver + Pytorch + miniconda
    本贴为实战,看理论请移步【地表最强】深度学习环境配置攻略|【nvidia-driver】,【cudatoolkit】,【cudnn】,【pytorch】为了验证我的环境配置方法没有问题,我特意租了两小时云服务器来从0配置环境。云服务器厂家:Ucloudubuntu22.043090*21.装NVIDIA-driver参考:http......
  • 大话设计模式之策略模式笔记
    策略模式结构classDiagramclassContext{-Statagestatage+ContextIntegace(Statagestatage)}classStratage{<<abstract>>+algorithmInterface()}classConcreateStratage1{}classConcre......
  • 大话设计模式之简单工厂模式笔记
    简单工厂模式以实现加、减、乘、除的计算器功能为例初级代码:输入数字交互界面@SuppressWarnings("resource")publicstaticvoidmain(String[]args){System.out.println("**********************************************");System.out.println("......
  • 零基础学习CAE——Hypermesh的使用技巧
    Hypermesh是一款强大的有限元前后处理软件,用于建模、网格划分、后处理和优化分析。以下是一些Hypermesh使用技巧:  1. 界面布局:在开始使用Hypermesh之前,可以调整界面布局以适应个人喜好。可以通过"View"菜单中的选项来自定义工具栏、视图和面板的位置和大小。 2. 快捷键......
  • 算法学习笔记(31): 李超线段树
    李超线段树是一种按照值域维护一次函数最值的数据结构,其核心在于一次函数和值域的双单调性。如果预先对于值域离散也可以维护其最值。也就是说只要满足时一次函数,以及下标的单调性都可以利用李超线段树维护。李超线段树就是利用线段树来维护一次函数的最值,每一个结点对应了一......
  • ansible学习笔记
    ansible目录ansible安装1.配置1.1Inventory(主机清单)1.2ansible.cfg2.模块2.1yum模块2.2copy模块2.3get_url模块2.4fetch模块2.5file模块2.6service模块2.7group模块2.8user模块2.9cron模块2.10mount模块2.11firewalld模块2.12command/shell/raw模块2.13script......
  • vue学习八
    <divid="app8"><ul><liv-for="(item,index)inlist"style="display:inline;list-style-type:none;margin-left:10px;"@click="indexactive=index">......
  • vue学习七
    <divid="app7"><divstyle="height:80px;width:80px;background-color:aquamarine;"@click="father"><divstyle="height:40px;width:40px;background-color:bisque;"@click=&quo......
  • CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属
    CSS3是用于为HTML文档添加样式和布局的最新版本的层叠样式表(CascadingStyleSheets)。下面是一些常用的CSS3属性及其详细解释:border-radius:设置元素的边框圆角的半径。可以使用四个值设置四个不同的圆角半径,也可以只使用一个值来设置统一的圆角。box-shadow:创建一个元素的阴影效果......