Linux 【进程】

目录

1.冯诺依曼体系结构(硬件结构)

冯诺依曼结构计算机的基本工作原理是什么?

举例说明数据的流动过程

2.操作系统简述

总结:先描述,再组织

3.进程

4.通过代码创建子进程:fork

进程终止

进程等待

waitpid:

进程具有独立性,为什么父进程能拿到子进程退出码数据?

5.Linux操作系统进程状态

环境变量

批量化注释+去注释

6.进程替换

exec系列函数

 自制shell


1.冯诺依曼体系结构(硬件结构

存储器指的是:物理内存

冯诺依曼体系结构中数据输入设备的有:键盘、摄像头、话筒、磁盘(读取)、网卡等

冯诺依曼体系结构中数据输出设备的有:显示器、磁盘、音响、网卡等

中央处理器(CPU)的运算器进行运算的两种情况:算术运算,逻辑运算;

控制器:CPU可以响应外部事件(拷贝数据到内存)


硬件层面上的数据流向

CPU读取数据(数据+代码),都是要从内存中读取。站在数据的角度,我们认为CPU不和外设直接交互。外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

冯诺依曼体系结构最典型的特征是所有的外设(输入单元和输出单元)产生的数据,必须将数据写入存储器。存储器本身没有计算能力,CPU通过某种方式来访问存储器,将数据读取进CPU内部,CPU进行运算器运算,控制器控制,最终将计算完的结果写回到内存当中。最后将最终的结果显示到显示器当中。

总结:所有设备都只能直接和内存打交道


冯诺依曼结构计算机的基本工作原理是什么?

计算机就是为了完成指定的数据处理,而通过指令按指定流程完成指定功能,指令的合集就是一段程序。计算机就是按照指定的指令执行流程完成对指定数据的处理

简写为:存储程序、程序控制


举例说明数据的流动过程

由于程序已经在内存中运行,当我们发送消息时,通过键盘输入(输入设备),输入的数据放到内存,cpu经过计算回写到存储器,存储器将数据定期刷新出去,此时的输出设备叫做网卡。


接收消息的电脑接受数据,此时的输入设备是网卡,网卡收到的数据放到内存里,然后经过cpu运算,把处理完的结果再写回存储器里,存储器定期将数据刷新到输出设备,此时的输出设备是显示器。

总结:冯诺依曼结构规定了计算机硬件体系结构走向,如果数据流向不清楚,想象一下硬件体系结构是什么样子,程序的数据流走向也就清楚了(硬件决定了走向,例如胳膊只能向上弯)


2.操作系统简述

操作系统是“搞管理”的软件,与硬件交互,管理所有的软硬件资源,为用户程序(应用程序)提供一个良好的执行环境,操作系统包括:

1.内核,也就是操作系统(进程管理,内存管理,文件管理,驱动管理)

2.其他程序(例如函数库,shell程序,接口,库等等)

总结:先描述,再组织

如何管理软硬件?管理者(操作系统)拿到被管理者(硬件)的核心数据,来进行管理决策才最重要的,先对被管理对象进行描述,在根据描述类型,定义对象,可以把对象组织成数组或者其他数据结构。也就是对数据的管理工作,变成了对数组或者其他数据结构的增删改查

管理:是对被管理对象数据的管理

1. 描述起来,用struct结构体 2. 组织起来,用链表或其他高效的数据结构


系统调用和库函数

操作系统会展开部分接口,供开发使用,由操作系统提供的接口,叫做系统调用。

对系统调用进行适度封装,形成库,更加方便开发者或者用户使用


3.进程

管理大量进程:先描述,再组织(描述:Linux内核中操作系统会为每个进程申请一个结构体:PCB)

该结构体保存了对应进程所有的属性,方便操作系统管理进程。组织:对进程的管理,变成了对进程PCB结构体管理(增删查改),等于对数据结构管理(相当于学生管理系统,学生在学校不代表就是该校学生,配合管理系统信息才能确定)

总结:进程=对应的代码和数据+进程对应PCB结构体

PCB(进程控制块 process control block)

Linux系统中PCB名称:struct task_struct{};

查看进程状态:ps ajx | head -1 && ps axj | grep 'mytest'

写一个死循环,查看mytest状态

PID:进程ID,代表当前进程的ID值

grep --color =auto mytest:最后一个是grep进程,查找mytest,grep中包含该关键字,通常一起显示

ls /proc:把所有内存级进程数据以文件形式显示出来(目录文件是动态的)

死循环PID程序1006运行运行

获取当前进程pid的系统调用函数:getpid

其中pid_t是操作系统提供的属性类型,实际是一个无符号整数

知道pid,还可以使用kill命令终止指令:kill -9 pid

获取当前进程的父进程的系统调用函数:getppid

查看当前进程父进程可以发现:ppid是bash,就是shell命令行,外壳程序

在命令行中运行命令或者程序时,父进程永远都是bash(执行命令时,所有的命令都是以子进程的形式去运行,shell以创建子进程的方式运行一段命令或程序)


4.通过代码创建子进程:fork

fork有两个返回值:

1.失败的时候返回-1

2.成功时  a.给父进程返回子进程pid b.给子进程返回0

为什么fork有两个返回值?

1.因为fork是函数,return语句被其内部实现的创建子进程代码两个执行流各自执行,返回值就有两个

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北方留意尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值