学习笔记6
第三章 Unix/Linux进程管理
多任务处理
- 多任务处理指的是同时进行几项独立活动的能力
这种逻辑并行性称为“并发”
多任务处理是所有操作系统的基础
进程的概念
进程是对映像的执行
如下是一个非常简单的PROC结构体:
- next是指向下一个PROC结构体的指针
- ksp保存的堆栈指针
- pid是一个进程的进程编号
- status是当前状态
- priority是进程调度优先级
- kstack是进程执行时的堆栈
多任务处理系统
多任务处理系统,简称MT,由以下几个部分组成。
- 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文件
在32位GCC汇编代码中可实现进程上下文切换
- queue.c文件
可实现队列和链表操作
int enqueue(PROC **queue,PROC *p)
{
PROC *p = *queue;
if(q==0||p->priority > q)
}
Unix/Linux中的进程
- 进程来源
当操作系统启动时,操作系统内核的启动代码会强行创建一个PID=0初始进程。
执行初始进程P0 - INIT和守护进程
当进程P1开始运行时,它将其执行映像更改为INIT程序。因此,P1通常被称为INIT进程,因为它的执行映像是init程序。P1 开始复刻出许多子进程。
P1的大部分子进程都是用来提供系统服务的。它们在后台运行,不与任何用户交互。 - 登录进程
P1复刻了许多LOGIN进程,每个终端上一个,用于用户登录。 - sh进程
当用户成功登录时,LOGIN进程会获取用户的gid和uid,从而称为用户的进程。他将目录更改为用户的主目录并执行列出的程序,通常是命令解释程序sh。 - 进程的执行模式
在Unix/Linux中进程以两种不同的模式执行,即内核模式和用户模式,简称Kmode和Umode。在每种执行模式下,一个进程有一个执行映像。
编程项目:sh模拟器
带有I/O重定向的单命令
提示用户输入命令行,其形式为:
cmd arg1 arg2 arg3…argn
处理简单命令:
cmd = "cd" : chdir(arg1) OR chdir(HOME) if no arg1;
cmd = "edit": exit(0) to terminate;
对于所有其他命令:
创建子进程;
等待子进程终止;
打印子进程的退出状态;
继续执行步骤1;
实践
编程项目:编写一个c程序来显示设备上EXT2文件系统的块组描述符
相关的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_COMMAND_LENGTH 100
int main() {
char command[MAX_COMMAND_LENGTH];
while(1) {
printf("请输入命令:");
fgets(command, MAX_COMMAND_LENGTH, stdin);
command[strcspn(command, "\n")] = '\0'; // 去除换行符
if(strcmp(command, "exit") == 0) {
printf("程序已退出。\n");
break;
}
system(command); // 执行命令
printf("\n");
}
return 0;
}
运行结果:
苏格拉底挑战
-
知识点1:进程的概念
我在学习进程的概念知识点,请你以苏格拉底的方式对我进行提问,一次一个问题。
- 针对我进程的概念知识点,我理解了吗?
- 我的回答结束了,请对我的回答进行评价总结。
-
知识点2:进程管理的系统调用
-
我在学习使用进程管理的系统调用知识点,请你以苏格拉底的方式对我进行提问,一次一个问题。
-
针对我进程管理的系统调用知识点,我理解了吗?
-
我的回答结束了,请对我的回答进行评价总结。
-
问题与解决思路
在学习过程中,我遇到了以下问题,并使用chatgpt等AI工具解决:
- 问题1:不是很理解进程创建的具体流程