【linux】part1-进程详解

初步了解冯诺依曼体系

我们常⻅的计算机,如笔记本。我们不常⻅的计算机,如服务器,⼤部分都遵守冯诺依曼体系。

输入单元:包括键盘,鼠标,扫描仪,写板等

中央处理器(CPU):含有运算器和控制器等

输出单元:显⽰器,打印机等

  • 这⾥的存储器指的是内存
  • 不考虑缓存情况,这⾥的CPU能且只能对内存进⾏读写,不能访问外设(输⼊或输出设备)(数据层⾯)
  • 外设(输⼊或输出设备)要输⼊或者输出数据,也只能写⼊内存或者从内存中读取。
    ⼀句话,所有设备都只能直接和内存打交道。

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

信息传输就是从一个设备拷贝到另一个设备;


一、为什么要有内存

有了内存,计算机的价格就更加的平均化,更具性价比,让普通人都能大范围的购买使用计算机

二、认识操作系统

1.是什么

一个基本的程序集合就是操作系统,操作系统就是一款进行软硬件管理软件
操作系统包括:

  • 内核:进程管理,文件管理,内存管理和驱动管理
  • 其他程序:例如各种预装程序,外壳shell

2.为什么

操作系统向下进行软硬件资源的管理,向上给用户提供良好的操作环境和服务

1.体系结构狭义上将就是芯片结构:如x86,x64;

软硬件体系结构则是从硬件到用户层状的体系结构,高内聚低耦合

2.访问操作系统,需要通过系统调用,实际上通过函数调用,只不过是系统帮助实现的,向我们使用的printf()函数底层就封装了一层系统调用函数

3.只要访问了硬件,就一定贯穿了整个操作系统

4.库有可能就封装了系统调用

3.理解操作系统

3.1如何理解管理

在学校中,校长"决策",扮演着管理者的身份,校长(管理者)交付指令给各级辅导员进行"执行",由辅导员传达给学生(被管理者),完成一次指令的执行;在计算机中,操作系统就是所谓的"管理者",驱动程序就是"执行者",各个硬件就是"被管理者";

校长无需和学生面对面交流,只需拿到学生的相关数据就可以进行决策,同样操作系统也只需拿到硬件的数据对硬件进行管理,而如何拿到数据进而进行增删查改?操作系统是用C语言写的,它能通过结构体struct{}解决每个设备属性数据问题,c++中有类的概念;这一过程我们可以叫他"描述";但是如此庞大的数据集很难进行管理,所以我们可以通过链表进行节点的链接,这一过程我们可以叫他"组织",此时数据结构的功能就大大展现出来,所有的管理无外描述+组织

在组织数据中,STL(算法和容器)同样发挥着重要作用,所以类和STL是c++最重要的模块,在语言的层面就已经给我们做了面向对象层次的划分

3.2 如何理解系统调用

操作系统向上提供对应的服务(让用户有访问硬件的能力)

四、进程

书上的概念:进程是程序的一个执行实例,或者正在执行的程序。

核心概念:进程担当这分配系统资源(CPU时间,内存)的实体。

4.1 是什么

进程=PCB(task_struct)+自己的代码和数据

这时候对进程的管理就变成了链表的增删查改

PCB里包含进程的所有属性

4.2 指令操作

进程都会有一个PID,进程开始之前操作系统都会根据编码给它分配一个PID,如何去查看,需要用到getpid(),这一系统调用函数

查进程 ps ajx(查所有的进程任务)

ps ajx | head -1 ;ps ajx | grep 所要查看的程序/对应的PID

ctrl+c:杀掉进程 ,之后就看不到这一个进程

这个 grep --color=auto 3443285 并不是原来那个进程,而是 grep 命令本身。当我过滤到这一个命令,结果就是:


注意:历史上执行起来的指令,工具,运行起来的程序,都是进程!!!

/proc 以文件的形式查看所有进程

当你进入到某个进程里会有各种这个进程所包含的各种文件信息,其中exe是磁盘中的可执行程序(即便你把rf删除了磁盘中的可执行程序文件,但是内存中的程序依旧在执行,因为内存中早已有了它的拷贝)

其中的cwd(currrent work dir 当前工作路径),进程开始会自动记录下它当前的路径,而如果要改这个cwd,可以在程序代码中使用chdir函数,chdir(路径)可以修改cwd

getppid();获取父进程的pid

从中我们发现父进程的PID在每次运行启动时都不变,只有子进程的PID在变,那么这个可执行程序的父进程是谁?

可以看到他的父进程是bash

补充知识点:命令行解释器:bash/-bash(远程登录),OS会给每一个登录用户分配一个bash,bash也是一个进程

4.3 创建子进程

创建子进程

pid_t fork();一个系统调用函数

进程之间互相独立,互不干扰,

fork(),创建子进程的时候,如果创建返回0,再将子进程的PID返回给父进程,如果创建失败返回-1;

  • fork会有两个返回值?
    是的,父进程和子进程的关系是1:n,所以父进程需要拿到子进程的PID后续方便管理,子进程没有自己的代码和数据,所以默认会把父进程的拷贝一份,自己来执行
  • 既然父子进程同时进行,那么一个函数将会被返回2次?
    既然return()了,那么核心工作就已经全部搞定了,执行fork函数后就已经完成了申请子进程pcd,拷贝父进程pcb(除了PID),甚至放入调度序列。即执行完fork之后,子进程就已经开始在运行了,所以父进程需要返回一次,子进程也要返回一次
  • 子进程如果修改了父子的共享(全局)数据,会影响到父进程吗,会影响进程之间的独立性吗?
    不会!父子进程任何一方如果要修改,OS会在底层把被修改的数据拷贝一份,这就是写时拷贝

由此验证,父进程的ret始终保持不变!

相关推荐
AlfredZhao19 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 天前
Linux 11 动态监控指令top
linux
小宇宙Zz2 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信