【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始终保持不变!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值