第三章学习笔记

AI提问

1.INIT程序

在这里插入图片描述

2.LOGIN进程

在这里插入图片描述
在这里插入图片描述

3.linux进程中用户模式与内核模式分别有什么作用

在这里插入图片描述
在这里插入图片描述

4.linux进程里的fork()

在这里插入图片描述

5.linux进程里的getppid()与getpid()

在这里插入图片描述

6.linux管道命令处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

学习笔记

1. 多任务处理:同时执行几项独立任务的能力。在单处理器(单CPU),一次只能执行一个任务,多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操作从一个任务切换到另一个任务。不同任务之间执行切换的机制称为上下文切换,将一个任务的执行环境更改为另一个任务的执行环境,如果切换速度足够快,就会给人一种同时执行所有任务的错觉。在有多个CPU或处理内核的多处理系统中,可以在不同CPU上实时,并行执行多项任务。

2. 进程的概念:在操作系统中,任务称为进程,我们将执行映像定义为执行代码,数据,堆栈的存储区,进程正式定义为:

                   进程是对映像的执行。

3. 操作系统将一系列执行视为使用系统资源的单一实体,在操作系统内核中,每一个进程用一个独特的数据结构表示,称为PROC结构体,PROC结构体中包含某个进程的所有信息,下面是一个PROC结构体

1.next是指向下一个PROC结构体的指针,ksp是保存的堆栈指针,当某一进程放弃使用CPU时,它会执行上下文保存在堆栈中,并将堆栈指针保存于ksp。Status表示进程的当前状态,priority是进程调度优先级,kstack是进程操作时的堆栈,pid当前进程的编号。

4.Unix/linux中的进程:

(1)、进程来源,操作系统启动时,操作系统内核的启动代码会强行创建一个PID=0的初始化进程,即通过分配PROC结构体进行创建,初始化PROC内容,并让运行指向proc[0].之后系统执行初始进程,p0继续初始化系统,包含系统硬件与内核数据结构,之后他挂载一个根文件系统,使系统可以使用文件,在初始化系统之后,p0复刻一个子进程p1并把进程切换为用户模式运行p1.
(2)、INIT和守护进程,进程p1开始运行,它将执行映像3改为INIT程序,所以p1成为INIT进程,因为其执行映像为init程序,p1开始复刻出许多子进程,p1大多数子进程都是用来提供系统服务的,在后台运行,不与用户产生交互,这样的进程为守护进程。
(3)、登录进程,LOGIN进程用于用户登录,每一个LOGIN进程打开三个与自己终端相关联的文件流,这三个文件流用于标准输入stdin,标准输出stdout与标准错误信息stderr,每一个文件流都指向进程堆区中的FILE结构体的指针
(4)进程的执行模式、进程以两种模式执行,内核模式、用户模式。(Kmode、Umode)。内核模式下可以随意进入用户模式,但用户模式进入内核模式只有以下几种操作,
1.中断,中断是外部设备发送给CPU的信号,请求CPU服务,用户模式下的CPU会响应信号并中断进程,之后CPU进入内核模式处理中断。
2.陷阱,陷阱是错误条件,如无效地址,非法指令,除以0等,这些错误条件被cpu识别为异常,使得CPU进入内核模式处理错误
3.系统调用,系统调用是一种允许用户模式进入内核模式以执行内核函数的机制,当某进程执行完内核函数,将一个期望结果和一个返回值返回到用户模式,这个值通常为0或-1.

5.进程管理的系统调用

(1)、fork:int pid = fork():fork()创建子进程并返回子进程的pid失败返回-1.
(2)、进程执行顺序,在fork完成后,子进程与父进程和系统中所有其他进程竞争CPU运行时间,
(3)、进程终止1.正常终止,2.异常终止

6.I/O重定向

(1)、文件流与文件描述符
1. sh进程有三个用于终端I/O的文件流:

• stdin:标准输入,文件名描述符为0
• stdout:标准输出,文件描述符为1
• stderr:标准错误,文件描述符为2

2.重定向标准输入/输出

重定向标准输入(用一个新打开的文件来替换文件描述符0,则输入来自改文件而不是原始输入设备)
• #include <fcntl.h>

• close(0);
• int fd=open(“filename”,O_RDONLY);
• /*
• close()关闭文件描述符0,open()系统调用打开文件
/
• /
OR /
• int fd=open(“filename”,O_RDONLY);
• clode(0);
• dup(fd);
• /

• 系统调用dup(0)复制fd到数值最小的未使用文件描述符中
/
• 重定向标准输出(一样用一个文件替换文件描述符1)
• printf(“filename=%s\n”,items);
• /
想要实现上述操作需要发出一个write系统调用: */
• close(1);
open("filen

7.管道

管道式用于进程交换数据的单向进程间通信信道,管道有读取端与写入端,

(1)、管道命令处理

Cmd1 | cmd2
例ls-l | grep .txt

(2)命名管道

又称FIFO,在文件系统中以特殊文件的形式存在,以下为一个例子:

1. 在sh中,通过mknod命令创建一个命名管道:

mknod mypipe p

2.或在c语言程序里,用mknod()系统调用

Int r =mknod(“mypipe”,S_IFIFO,0);

4. 输入:ls -l mypipe;显示:prw-r-r- 1 root 0 time mypipe文件类型p表示它是管道,连接数是1,大小为0。
5. 进程可像访问普通文件一样访问命名管道。

运行

1.fork

在这里插入图片描述

在这里插入图片描述

2.进程的执行顺序

在这里插入图片描述
在这里插入图片描述

3.管道操作

在这里插入图片描述
在这里插入图片描述

苏格拉底提问

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值