遗漏知识点补充(lesson12&&Linux进程(1))

查看进程相关属性解释图


系统调用就是你去调用,或者简单一点,你在键盘上敲下了系统提供的接口比如:open、read、fork,那么此时,系统为了去执行这些指令,会从用户态变成内核态来执行,执行完后,再变回用户态把结果返回,这就是所谓的:操作系统只提供了系统调用接口来访问内核


循环查看一个进程信息的脚本

bash 复制代码
while : ;do ps ajx |head -1;ps ajx|grep proc|grep -v grep ;echo "--------------------------------------------------------------";sleep 10;done

查看一个进程的ppid为4205父进程,结果如下:

bash 复制代码
[txf@VM-4-5-centos lesson12]$ ps ajx | head -1 ;ps ajx | grep 4205 | grep -v grep
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
 4204  4205  4205  4205 pts/0    11364 Ss    1001   0:00 -bash
 4205 11364 11364  4205 pts/0    11364 R+    1001   0:00 ps ajx

bash创建了一个子进程来执行ps ajx的命令


对父子进程写时拷贝的理解:

父进程与子进程共享代码段,暂时共享数据段,当有一个进程要改写数据时:1、父进程要改写数据,就会发生缺页异常,然后会建立真实的物理内存,然后在父进程的PCB中把父进程的虚拟内存映射到物理内存形成页表,然后改写数据。2、子进程要改写数据时,子进程共享父进程的代码段,而且不会把父进程的数据段全部复制到新的一块物理内存上,而是写时拷贝,哪块数据要改,操作系统就给它单独分配一块内存空间专门放要改写的数据,其他的不动,然后在子进程的PCB的页表中记录子进程中关于那个要改的数据的虚拟内存与单独分配的那块内存空间之间的映射关系,这样虽然子进程和父进程有同样的虚拟内存地址,但在运行时,会有不同的结果。


对进程状态的理解:

运行状态:

每个CPU都要维护一个自己的struct runqueue : 运行队列,CPU队列的方式对进程做调度,struct runqueue 包含了 struct task_struct* head ,struct task_struct* tail ,一个进程要运行,首先要先把一个进程放到运行队列中去。

调度器:一种函数可以把运行队列作为参数传进来,调度器就能找到所有排队的进程

自我理解:我编写了一个程序while(1) 死循环,如果CPU只执行一个程序完后,再去执行其他的程序,那我的页面不就一直被卡死了,真实情况是while(1),一直循环,我可以直接X掉,结束这个循环,为什么我能在循环在被执行时,还可以让CPU执行其他的指令,不就是因为PU不仅仅只执行循环这一个程序,而是给每个程序都分配了被运行的时间(时间片 int time_... ),这个程序运行了这么些时间,CPU转而去指令其他的程序

时间片足够短,这样在一段时间内,所有的进程代码都会被执行,(ps : 这也是边听歌边打游戏的底层吧 )这也叫多个进程并发执行

在CPU上会有大量的把进程从CPU上拿下去/放上来的动作 :进程切换

阻塞状态:

操作系统对硬件做管理也是先描述,在组织,创建strcut dev { int type,int status ,struct task_truct* head ;........}

如果一个进程要从键盘读取(scanf(.....)),如果键盘不输入,那么这个进程就绝对不能被放到运行队列中,这个进程要等待键盘资源,所以这个进程要被放到键盘的等待队列当中:struct task_struct* waitqueue ,进程在等待队列当中等待设备就绪,当我们的驱动程序读取我们的键盘,当键盘里有数据了,这个进程就会被放到CPU的运行队列里,这种等待特定设备的进程的状态称为该进程处于阻塞状态。

每个设备(的struct dev)都有一个等待队列,一个进程等待一个设备,如果这个设备没有就绪,此时进程就自动把PCB链入该设备的等待对列中,如果设备可读了,这个进程就把自己放运行队列里。

挂起状态(阻塞挂起状态):

如果多个进程都在等待,如果在等待时,操作系统的内存资源不足了,操作系统就会保留进程的PCB,然后把进程的代码和数据交换到磁盘当中,(交换区,哈哈😄):内存数据的换出/换入。

一个进程的代码和数据被换出了,只剩个PCB,此时这个进程就是挂起状态。

问题:

  1. 具体Linux当中的状态是如何维护的
  2. 在Linux当中,运行状态是什么,阻塞...
  3. ..............
相关推荐
Lsetea4 小时前
curl指定CA目录仍报证书不受信任:--capath与OpenSSL rehash排查
运维·https·ssl·openssl·curl
夜听莺儿鸣4 小时前
502-002_Linux驱动开发模块化编程
linux·驱动开发·模块化编程
wuminyu5 小时前
C++协程实现接收端的零拷贝Buffer管理原理剖析
java·linux·c语言·jvm·c++
优化Henry5 小时前
LTE 载波频率与频点配置详解
运维·网络·学习·5g·信息与通信
代码方舟5 小时前
数据科学风控实战:基于天远全能消金报告构建自动化信用评估网关
运维·人工智能·自动化
科力锐品牌君5 小时前
应用级灾备 | 海量非结构化数据如何实现高效数据保护
linux·运维·网络·安全·系统安全·数据安全·灾备
KaiwuDB5 小时前
KaiwuDB 运维实战04:DRBD + KaiwuDB——物联网场景下的低成本数据库高可用方案
运维·数据库·物联网·时序数据库·kaiwudb·aiot·多模数据库
zhangrelay6 小时前
ROS项目设计案例智能大模型正经乱答案例
linux·笔记·学习·ubuntu·机器人
福建佰胜张工6 小时前
A5E00839230西门子工业核心配件详解:参数、安装调试与故障运维全攻略
运维·网络·安全·自动化
流浪0016 小时前
Linux系统篇39——线程(四) pthread库的由来和线程的创建与等待
linux·操作系统·线程·pthread库