Linux进程

一.计算机硬件结构

1.冯-诺伊曼体系结构

现代大多数计算机的体系结构都是冯-诺伊曼体系结构,因为这样的体系结构具有性价比:

内存是分级的,越快所需费用越高,如果所有设备都是用高级别的存储设备,那么计算机的价格将非常昂贵,,冯-诺伊曼体系结构的设备只需要内存部分使用高级别的存储设备,有数据需要传输计算时,将输入设备的数据拷贝到内存中(系统会提前将一定数据提前拷贝到内存中以保证效率)(因此体系结构的效率由设备的“拷贝”效率决定),由内存跟CPU进行交互,这样一来大大节省了成本,计算速度也非常快,现代计算机是性价比的产物

2.重新理解软件加载

软件要运行必须要加载,什么是加载?其实加载就是把软件运行必要的文件拷贝到内存中,

为什么要先拷贝到内存中?因为是冯-诺伊曼的体系结构规定的,CPU只和内存打交道

程序在运行之前在哪里?在磁盘的文件中

3.理解数据流动

将以前理解的的计算机图标替换成两个冯-诺伊曼体系结构进行交互

二.操作系统

1.概念

一个基本的程序集合,称为操作系统(OS)

操作系统是一款进行软硬件管理的软件

操作系统包括

a.内核(进程管理,内存管理,文件管理,驱动管理)

b.其他程序(例如函数库,shell程序等)

2.设计操作系统(OS)目的

3.理解操作系统(OS)

在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件

(1).如何理解“管理”

世界上的所有管理都是“先描述,再组织”

学校管理学生为例:角色有校长,辅导员,学生

校长是管理者,学生是被管理者,辅导员相当于中间人

校长拥有决策权,辅导员驱动执行,学生执行对应行为

管理者通过数据来管理被管理者,中间人统计并反馈被管理者的数据给管理者

校长通过辅导员反馈的数据来进行决策,对学生进行管理

随着数据量的增多,难以管理,这时恰好校长以前是一位程序员,校长写了一个结构体,将每一个学生的信息输入进去,也就是将每一个学生的所有信息都在各自的一个结构体中进行描述,但是这样查找不方便,于是就增加了一个*next,以链表的形式进行组织,这样一来就方便了管理!

于是校长日常的工作就变成了对链表的增删查改!

这样的一个过程就是一个建模的过程

在C++等面象对象编程语言也体现了这一点:类(”先描述"),STL库(“再组织")

4.理解系统调用

a.操作系统不相信任何用户或者人

b.操作系统要向上提供对应的服务

举例:银行,银行不相信任何用户,但是要向用户提供理财产品或者存取钱的服务,于是开设了办理窗口,让工作人员在金库里存取钱

man手册第2册的接口都是系统调用的接口,其实就是c语言函数

三.进程

1.概念

进程 = 内核数据结构对象(PCB) + 自己的代码和数据

在我们运行一个程序时,需要把程序的代码和数据拷贝到内存上,那么系统如何进行管理呢?

系统会在内核创建一个结构体,用来存储这个程序的相关属性信息,该结构体称作进程控制块,通过它里边的信息可以找到当前程序的一切信息,这也就完成了管理的“描述”动作,随后将进程控制块加入到进程列表中,也就是“组织”,这样系统就可以对该程序进行管理了。

那么这时候我们可以谈谈什么是进程了,进程包括进程控制块(PCB)这个结构体对象和自己的代码和数据,这两个在一起才称作进程

2.内存控制块

这里我们只谈Linux上的PCB,task_struct

这里只需要了解即可,后续会深入理解具体含义

• 标⽰符: 描述本进程的唯⼀标⽰符,⽤来区别其他进程:pid(process identification)

• 状态: 任务状态,退出代码,退出信号等。

• 优先级: 相对于其他进程的优先级。

• 程序计数器: 程序中即将被执⾏的下⼀条指令的地址。

• 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

• 上下⽂数据: 进程执⾏时处理器的寄存器中的数据[休学例⼦,要加图CPU,寄存器]。

• I∕O状态信息: 包括显⽰的I/O请求,分配给进程的I∕O设备和被进程使⽤的⽂件列表。

• 记账信息: 可能包括处理器时间总和,使⽤的时钟数总和,时间限制,记账号等。

• 其他信息

• 具体详细信息后续会介绍

3.深入理解

我们历史上执行的所有指令,工具,自己的程序,运行起来都是进程!!

a.获取pid/ppid:

我们可以通过getpid系统调用函数获得进程的pid,getppid获得父进程的pid(注意是在在自己的程序里调用函数,不是在命令行调用)

b.查看进程信息

ps ajx可以获得所有进程的信息

c.杀掉进程

杀掉进程:ctrl + c   /   kill  -9  + 进程pid

d.补充两个小知识:cwd与exe

e.理解指令,工具都是进程

4.子进程

1.创建子进程

需要使用fork函数,fork函数也是一个系统调用函数

2.关于子进程的问题

子进程与父进程是如何进行代码执行的?

a.进程具有独立性!!!

子进程没有自己的代码和数据,因为目前没有程序新加载,所以它会和父进程共同使用一份数据和代码,但是这样就会造成一些问题,代码可以共同使用,但是数据如何共同使用?

b.写时拷贝!!!

 验证:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值