文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【Linux】冯诺依曼体系结构、操作系统及进程概念

2023-09-04 18:10

关注

文章目录


一、冯诺依曼体系结构

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

总体来讲:计算机可以分为==输入设备、输出设备、存储器、运算器&&控制器==

输入设备:键盘、磁盘、网卡、鼠标、摄像头等

输出设备:显示器、磁盘、网卡、各种打印机等

存储器:内存(掉电易失)

运算器&&控制器:CPU

image-20221030181211206

们知道,CPU的速度是最快的,里面配有寄存器也是最快的,内存是较快的,而外设是较慢的

image-20221030191837778

CPU只能被动接收别人的指令,别人的数据,所以CPU要去识别别人的指令(制造时内置自己的指令集)才能执行别人的指令

内存存在的意义在于:👇

如果没有内存,CPU只能从外设获取数据进行处理,但是,上面我们说到了,外设的速度是相对较慢的,此时的CPU效率取决于外设,会导致处理效率较慢。

而内存的存在,解决了这个问题,可以先把数据存放在内存中,在加载到CPU进行处理,这大大提高的数据的处理。

所以CPU读取数据必须从内存中拿!!!

而我们所说到的IO(输入输出既input和output)就是从内存的角度上看,把数据从输入设备存入内存的过程叫做input,把内存中的数据输出到输出设备的过程叫做output,这就是IO的过程

对于冯诺依曼体系,我们应该注意

这里的存储器指的是内存

不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)

CPU不和外设直接打交道,和内存直接打交道。外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

简单来说,就是所有设备都只能直接和内存打交道,提高整机效率

所以程序的运行必须要加载到内存,CPU执行的代码访问数据,只能从内存中读取(这也是体系结构规定的)


二、操作系统(OS)

操作系统是一个进行软硬件资源管理的软件,操作系统内有进程管理,文件系统,内存管理,驱动管理

操作系统对下通过合理的管理软硬件资源,对上为用户提供稳定的、高效的、安全的、的执行环境

管理的本质是对数据做管理,操作系统并不是直接对计算机中的各种硬件进行决策管理,而是通过数据进行分析,最终做出决策,再由驱动执行,从而达到管理的效果

image-20221030225640293

所有的管理,本质是对数据做管理,管理的方法是先描述在组织

计算机管理硬件

  1. 描述起来,用struct结构体
  2. 组织起来,用链表或其他高效的数据结构

三、系统调用和库函数

在开发角度上看,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用

系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发

这对应着用计算机体系结构图中的户操作接口和system call,我们或者说用户不是直接和操作系统进行操作交流的,需要通过调用各种接口间接地进行交流


四、进程

4.1概念

课本概念📝:一个运行起来(加载到内存)的程序叫进程,在内存中的程序叫进程

内核观点📝:担当分配系统资源(CPU时间,内存)的实体

4.2描述进程-PCB

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。课本上称之为PCB(process control block), Linux操作系统下的PCB是: task_struct

程序的本质是放在磁盘上的可执行文件(.exe文件),就是一个文件,根据冯诺依曼体系,软件运行要加载到内存中,而进程则是将程序加载到内存当中,并且由操作系统进行管理,生成一个描述自身性质的数据结构(PCB),由内核数据结构和进程对应的磁盘代码两者共同组成“进程”

task_struct-PCB的一种,在Linux中描述进程的结构体叫做task_struct。task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息 。

标示符: 描述本进程的唯一标示符,用来区别其他进程。

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

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

程序计数器: 程序中即将被执行的下一条指令的地址。

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

上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。

I/ O状态信息: 包括显示的I/O请求,分配给进程的I/ O设备和被进程使用的文件列表。

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

其他信息

4.3查看进程

说了这么多进程,我们总得见一见进程是啥样的把:

首先,创建文件(myproc.c和Makefile):

image-20221031144655959

文件内容:

image-20221031144745717

image-20221031144805518

make一下,生成可执行程序,开始执行:

接下来就是查看进程了:

image-20221031145146518

同时,我们可以杀掉(kill)进程,当然ctrl+c也可以直接结束掉:

进程在运行的时候本质是在读取进程内部的代码,内部在执行,从启动到终止中间可能会有一段很长的时间,这个进程就具备了动态属性。

也就是说,进程在调度运行的时候,进程就具有动态属性

以上就是我们对于进程简单的查看。

4.4与系统相关的系统调用

需要用到getpid()

image-20221031150358194

获取进程PID需要两个头文件,调用响相应函数,最后的返回值就是进程的PID

下面我们对myproc.c进行修改:

image-20221031150504264

执行:

image-20221031150744708

此外,我们还可以了解一下另一种查看进程的方式简单学习一下。

在Linux中proc是内存级目录

image-20221031152328312

数字开头就是进程的pid,一个进程也可以当做文件来看待

image-20221031152455230

如果我们结束进程,自然就找不到了:

image-20221031152538430

我们重新执行,进入:

image-20221031153326473

4.5系统调用获取进程标示符

进程id(PID)
父进程id(PPID)

image-20221031220330938

image-20221031220408257

命令行上启动的进程,一般它的父进程没有特殊情况的话,都是bash

4.5fork初识(并发引入)

创建子进程

image-20221031162532133

image-20221031223452412

image-20221031223758901

image-20221031224718909

我们需要看fork的返回值:

image-20221031225124028

image-20221031225140617

(所以对于结果我们很好理解,返回成功时,会给父进程返回子进程的pid,子进程会返回0)。但是,这里居然一个变量id居然会有两个返回值,这里在以前是想都不敢想的,后面我们在展开这个问题。我们根据这个返回结果写代码:

image-20221031230817522

多进程

image-20221031231022092

我们可以看到,两个while循环都执行起来了,这也证明了实际上参与while循环的有两个进程!并且它们是父子进程,即父子关系。

这也说明了,在fork之后,又创建了一个进程,两个进程分别在两个执行流中,因此可以分别执行if 和 else if,也可以分别进入while循环!

总结一句话,fork()之后,会有父进程+子进程两个进程在执行后续代码,fork()后续的代码,被父子进程共享,通过返回值不同,让父子进程执行共享代码的一部分,这就是并发式编程


五、总结

简单回顾一下,我们主要说了冯诺依曼体系及其其中涉及的问题,了解CPU不和外设直接打交道,和内存直接打交道,提高整机效率。对于操作系统我们从是什么、为什么、怎么办的角度进行说明。然后就是系统调用和库函数,最后我们引入了进程的相关知识概念,以及通过打印显示id,这里只是对进程引入,并没有过于深入了解。后续继续更新说明

最后,我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=17hhdzgwsudyj

来源地址:https://blog.csdn.net/weixin_60478154/article/details/127707756

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯