一.一图分析操作系统
我们知道操作系统是对电脑的管理系统,那么其管理的是什么呢?
在这里,我们明确的告诉大家,真正的管理是对数据的管理,所以,操作系统本质上就是对系统软硬件数据的管理
观察上图,请问为啥要有操作系统,管理数据人不也可以做到吗?
首先,你要先明白这个问题是在问什么,题目其实在问:为啥要有操作系统来管理数据?
答案非常简单,因为我们人管理数据的效率低,而计算机效率则非常快
如果你仔细观察上图,你会发现用户是不能直接访问操作系统的,而是通过访问到system call来访问到操作系统,所以为啥用户就不能访问操作系统呢?
如果我们用户就可以直接访问操作系统,是不是就可以实现窃取他人信息了,如果你不理解,想象一下银行取钱:是不是通过窗口实现的,而不是直接用户去直接拿钱。操作系统不能直接访问也是一样的,保障用户信息安全,通过system call接口用户就只能访问到自己的信息了
补充:LInux中system call是通过C语言实现的函数调用接口!!!
所以,总的理解,操作系统是唯一连接上面用户操作和下面驱动程序、硬件的地方,用户可以通过直接system call来调用操作系统,也可以通过用户操作窗口来调用system call再调用操作系统,而硬件是通过相应的驱动程序来调用的
二.再次理解C语言的scanf、printf
当我们使用scanf输入时:在键盘上输入内容,就能向电脑输入信息,那么我们知道键盘是硬件,为啥我们可以用scanf来控制硬件呢?不符合我们上面讲的规则啊?不是说用户只能通过system call或通过用户操作窗口来调用system call再调用操作系统吗?
如果你仔细观察,会发现在用户操作窗口中有一个lib,这其实是我们的标准库,当我们使用scanf时,就会调用标准库中scanf接口,而在该接口中有调用system call指令,所以我们调用了操作系统,从而控制硬件输入。
再仔细一想,我们平时写的那么多标准库中的接口是不是都是封装了system call调用的指令呢?
是的,在lib库中封装了system call相关的指令
此时相信你也大概能够理解什么是语言的跨平台性了?
语言的跨平台性,也叫可移植性,其实就是用户通过lib库调用不同的操作系统
如下图:
三.进程介绍
我们之前已经讲过了简单的操作系统,也讲了冯洛伊曼体系,现在就可以简单了解进程了。
如果你看过类似对进程的描述:
1.进程是指加载到内存的程序
2.进程是指正在运行的程序
我相信你如果不清楚进程的内容,可能对此会非常不解,那么该如何表述进程的概念呢?look down:
我们通过实例来带大家了解进程:
假如现在我的电脑要运行a.exe文件,首先会从磁盘中读取该文件到内存中,然后就会通过CPU处理得出结果输出,如下图:
是不是感觉就是这样子的?
如果我们有a.exe ,b.exe,c.exe三个文件读入内存中,我想问CPU会先处理那个文件呢?
这时候,你可能会说谁先进先处理谁,但是我咋知道在内存中那个是先进来的呢?
是不是就需要在内存中对文件有一些备注信息,通过备注信息就可以实现处理顺序了,是的,下面给大家介绍PCB这个概念:
PCB:进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合,该集合叫PCB,注意:PCB是统称,不同操作系统的实际名字是不一样的,例如:Linux中叫:task_struct
大家仔细观察会发现,PCB其实就是一个结构体,里面包含了如状态、优先级、内存指针等信息,现在我们的操作系统就可以通过管理PCB来管理多个文件程序了,这其实就是进程。
进程=PCB+可执行程序
PCB只是内核数据结构的一部分,更正确的说:进程=内核数据结构+可执行程序
重点知识:操作系统对进程的管理是对PCB的管理,不是对可执行程序的管理!!!
下面带大家看看task_struct内部内容:
标示符: 描述本进程的唯一标示符,用来区别其他进程。
状态: 任务状态,退出代码,退出信号等。
优先级: 相对于其他进程的优先级。
程序计数器: 程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
其他信息
后面我的博客会深入讲解,大家可以先看看即可。
四.CPU的操作
CPU通常只有三个操作:
取指令:CPU会按行一行一行的取出程序的内容,这就是取指令
分析指令:分析指令中的具体内容
执行指令:将指令内容进行执行操作
扩展知识:
pc指针:PC(program counter)是CPU中用于存放下一条指令地址的寄存器,SP为堆栈指针
当CPU执行到程序中的判断、循环或者函数跳转语句的时候,pc指针会提前保存接下来要跳转的地址,接下来程序执行到哪就取决于pc指针
判断、循环或者函数跳转语句本质上就是修改pc指针
最后,感谢大家的支持!