一.计算机硬件结构
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.写时拷贝!!!

验证:
2253

被折叠的 条评论
为什么被折叠?



