冯诺依曼体系结构&&操作系统(Operator System)

文章目录

  • 前文
  • 一、冯诺依曼体系结构
  • 二、操作系统
    • 1.概念
    • 2.描述进程-PCB
    • 3.进程


前文

1.认识冯诺依曼系统
2.操作系统概念与定位
3.深入理解进程概念,了解PCB


一、冯诺依曼体系结构

冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。
冯诺依曼体系结构&&操作系统(Operator System)_第1张图片
截至目前,我们所认识的计算机,都是有一个个的硬件组件组成

输入单元:包括键盘, 鼠标,扫描仪, 写板等
中央处理器(CPU):含有运算器和控制器等
输出单元:显示器,打印机等

关于冯诺依曼,必须强调几点:

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

二、操作系统

1.概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库, shell程序等等)

设计OS的目的

与硬件交互,管理所有的软硬件资源
为用户程序(应用程序)提供一个良好的执行环境

定位

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

如何理解 “管理”

我们可以想象成在公司,领导是如何管理的,一年到头都没有见过几次的领导,为什么年终的时候能够根据贡献给每个人发年终奖呢,这是因为领导根据数据得出的结论,在操作系统中,操作系统作为管理者,要根据反馈的数据对软硬件进行管理,管理的本质就是先描述,再组织,对应代码的先建模,再映射。

我们不可以直接跳到控制底层硬件,要经过系统软件部份才能控制底层硬件处理。
冯诺依曼体系结构&&操作系统(Operator System)_第2张图片

2.描述进程-PCB

磁盘上的文件被加载到内存时,系统会根据task_ struct内容分类,随即生成一个task_ struct进程信息控制块。
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

标示符: 描述本进程的唯一标示符,用来区别其他进程。
状态: 任务状态,退出代码,退出信号等。
优先级: 相对于其他进程的优先级。
程序计数器: 程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
I/ O状态信息: 包括显示的I/O请求,分配给进程的I/ O设备和被进程使用的文件列表。
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
其他信息

冯诺依曼体系结构&&操作系统(Operator System)_第3张图片
总结就是,操作系统为每一个加载进来的程序(即为进程),生成了一个task_struct结构体,为其创建一个进程控制块,以便控制这个进程。

进程 = 内核数据结构(task_struct) + 进程对应的磁盘代码


3.进程

通过系统调用创建进程-fork初识

子进程id(PID)
父进程id(PPID)
运行 man fork 认识fork
fork有两个返回值
父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)

  #include 
  #include 
  #include 
  int main()
  {
    int ret = fork();                                                         
    if(ret < 0){
    perror("fork");
    return 1;
   }
   else if(ret == 0){ //child getpid()是系统接口
   printf("I am child : %d!, ret: %d\n", getpid(), ret);
   } else{ //father
   printf("I am father : %d!, ret: %d\n", getpid(), ret);
   }
   sleep(1);
 return 0;
}

执行代码后,会有两个进程分别进行执行。

冯诺依曼体系结构&&操作系统(Operator System)_第4张图片
fork函数有三种不同的返回值,失败返回小于0,获取子进程后返回0,获取父进程后返回大于0,通常用if来分流,分别执行代码。


获取pid ppid

ps axj | head -1 && ps axj | grep test

grep 后面加要监视的代码文件名

冯诺依曼体系结构&&操作系统(Operator System)_第5张图片

你可能感兴趣的:(linux)