遗漏知识点补充(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. ..............
相关推荐
爱喝水的鱼丶33 分钟前
SAP-ABAP:ECC→S/4HANA ABAP 迁移升级指南——程序改造、语法兼容与性能优化 导语
运维·开发语言·性能优化·sap·abap·经验交流·开发交流
木子欢儿42 分钟前
openconnect Linux客户端安装 以及开机自启和登录
linux·运维·服务器
..Dauntless..1 小时前
【Linux】文件系统(一)
linux·运维·服务器
天空属于哈夫克31 小时前
企业微信API二次开发 赋能私域运营自动化
运维·自动化·企业微信
天远API2 小时前
零信任架构实战:基于天远运营商二要素V即时版构建自动化分时租赁出行会员身份一致性审核网关
运维·人工智能·架构·自动化
九零HTTP2 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
SHENGWEI胜为2 小时前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
极光通讯2 小时前
液冷服务器对内存和SSD的适配要求:高密度部署下的散热与信号完整性
运维·服务器
2501_937767164 小时前
面向设计 / 研发部门:终端文件统一归档 + 服务器定时备份实践
运维·安全
GeW4 小时前
新质生产力路线图:从Linux到数据库,企业落地要点都在这
linux