操作系统和进程相关的认识

目录

  冯诺依曼体系结构

  冯诺依曼体系结构五大组成部分

  为什么数据只能通过存储器进行输入和输出

  操作系统

  概念一:访问操作系统的请求都是通过系统调用完成的

  操作系统如何管理用户信息

  概念二:先描述,再组织。

    进程的概念

  在认识进行相关的知识之前我们需要先认识一下关于操作系统的相关的知识。

  据我们所知操作系统是位于软件和硬件之间的,可以协调软件和硬件之间的工具,那么我们的操作系统到底是怎么处理硬件与软件之间的关系呢?操作系统又是怎么与硬件链接起来的呢?那么我们就从硬件开始入手,一步步带大家认识一下操作系统的作用原理,以及其中进程的概念。

  冯诺依曼体系结构

  一提到硬件就不可不提到冯诺依曼体系结构。他是一种计算机设计的理念。在冯诺依曼体系结构当中我们的计算机大致可以分为五部分:输入设备,存储器,运算器,控制器以及输出设备。

  我们的数据通过输入设备加载到存储其当中,经过运算器的处理回到存储器当中,最后通过输出设备反映给用户。

  这五部分仅仅是一个大致的概念。

  冯诺依曼体系结构五大组成部分

  就比如我们的输入设备可以有好多工具,例如鼠标,键盘,摄像头,磁盘,话筒,网卡等等都属于输入设备。

  存储器指的就是我们的内存。

  运算器主要对我们的数据进行计算任务。(主要分为算数运算以及逻辑运算)

  控制器主要对我们的计算机硬件流程进行一定的控制。

  输出设备主要包括显示器,播放器(硬件),磁盘,网卡等等

  我们可以发现的是对于输入设备和输出设备有的工具是重复的,比如网卡和磁盘即使输入设备又是输出设备。这是因为我们不仅可以向磁盘当中写入数据还可以从磁盘当中读出数据,我们的网卡也是相同的道理。

  我们需要注意的是:对于数据在输入设备和输出设备的转换只能通过存储器进行。当我们的运算器将数据处理完毕之后也只能重新将数据写入到存储器当中之后再向输出设备进行输出。但是为什么要这样设计呢?

  为什么数据只能通过存储器进行输入和输出

  要想解释这个原因我们就需要向大家介绍一下存储金字塔的概念:

  由于计数以及材料的制约,我们会发现当我们的数据处理速度越快的时候,我们生产该材料所花费的费用也就越高。其中CPU的运算速度是最高的,其次是内存,最后是硬盘等外部存储设备。

  当我们采用的材料越好我们数据的运算速度也就越高,但是我们计算机的成本也就越高。当然我们可以全部采用最好的材料来保证我们的计算机高速的数据处理效率,但是这样并不是我们每一个人都可以承受这样的支出成本的。

  计算机之所以能够普及不仅仅是因为其便利的作用,也是因为其价格普遍人员都可以接收,这也正是计算机得到广泛应用的原因。因此我们需要适当的调整成本。

  所以我们的计算机组成的部分就分为高速运转的CPU部分,以及作为中转设备的内存部分,以及主要用于存储的硬盘部分。由于我们数据的处理速度逐渐减少,所需成本也逐渐减少,因此内存可以采用的空间要比CPU大得多,而我们的硬盘的存储空间又比内存空间大得多。

  由上述的结论我们可以知道,CPU部分的数据处理的速度很快(运算器+控制器)。但是我们的硬盘也就是我们的输入设备的数据存储速度很慢,所以就会产生很大的数据差,造成运行速度的浪费的情况。因为在CPU当中的数据处理早就已经结束了,但是我们的数据还在缓慢的进行输入。

  为了解决这种数据处理不匹配的问题也就有了我们的冯诺依曼体系模型。我们采用一个数据存储速率较为适中的工具存储数据,等到数据存储到一定的量的时候我们在将数据传给CPU进行处理。在数据存储的过程当中CPU还可以处理其他事务,这样就避免了我们机器效率的浪费。这也正是我们的计算机需要一个存储器来作为数组中间介质的原因。

  当我们想要向同学发送一条消息的时候。数据就会经过CPU处理之后存储到运算器当中,之后从输出设备进行输出,之后到达朋友的输入设备当中,进而存储到存储器当中,在经过CPU的处理,最终到达我们的输出设备也就是我们的显示屏幕上面。

  操作系统

  但是我们会发现硬件上的内容大部分都是独立存在的,那么我们要怎样将这些独立存在的东西相互链接起来呢?这个时候就用到了我们的操作系统。

  操作系统的要作用分为两点:1.帮助用户,管理好下面的软硬件资源。2.给用户提供一个良好的运行环境。

  要想有一个安全良好的运行环境那么就意味着我们的操作系统当中的数据不能随便被用户进行访问并修改。但是我们的操作系统又要为用户提供服务。

  概念一:访问操作系统的请求都是通过系统调用完成的

  就好比在银行当中,我们既需要在银行当中存取钱,又不能让我们任意的修改银行当中的账号数据。所以我们就需要采取一定的措施:为用户提供软件接口。就和银行当中的窗口一样,我们的操作系统为了自身的安全并且保证为用户提供服务,会有一个“窗口”(函数接口)。我们在窗口当中可以做符合要求的事情。

  这就有了我们操作系统的第一个概念:访问操作系统的请求都是通过系统调用完成的。

  所以我们硬件的使用也不例外,硬件想要被使用就需要通过系统调用接口被操作系统进行操作。硬件的系统调用接口也就是我们通常中所知道的驱动程序。

  操作系统如何管理用户信息

  那么我们又是通过怎样的方式被操作系统所管理的呢?举一个简单的例子:假如我们在上大学,大学的校长想要管理学校的学生的成绩信息,难道校长需要亲自找你见一面之后,亲自问问你的成绩怎么样吗?当然不会。校长只需要有一个成绩单,上面汇总了你各科的成绩,平时的学分,绩点等情况,这样就可以大致得出你平时的学习情况。

  操作系统对于用户信息的管理大致就类似于学校校长的管理情况。在操作系统当中系统会将各部分需要进行管理的软硬件的信息汇总成为一张信息表。比如优先级,进程的编号,进程的优先级等等。之后将这些信息通过链表的形式汇总起来,形成一张完整的信息表,之后我们想要知道一个软件或者硬件的使用情况只需要查看这张使用表即可。

  概念二:先描述,再组织。

  我们几乎所有的软件和硬件都是通过上述的形式被操作系统所管理起来的。这种管理的步骤大致可以分为两类:先描述再组织。首先我们可以将一个个体的相关信息描绘成为一个结构体。就比如想要描述一个学生的信息我们就可以定义学生的年龄,身高,成绩等相关信息为一个结构体。之后通过特定的数据结构将实例化的对象组织起来,形成一张表,就可以放到我们的操作系统当中进行管理了。大致情况如下:

    进程的概念

    进程实质上就是一个个被打开的软件。就是我们现实中见到的软件的“后台”。当我们打开一个软件我们就需要生成一个进程对我们的软件进行管理,管理人还是我们的操作系统。管理的方式还是通过先描述再组织最终形成一个结构体,我们将这个结构体再链接进入指定的序列当中就可以对该进行进行管理了。

  在Linux当中我们将上述生成的结构体成为pcb。pcb结构体当中包含进程的所有属性。

  我们平时编写的代码想要在变成一个进程我们只需要运行即可。但是我们平时编写的程序太短,一旦运行结束那么进程也就相对应的结束了。我们可以编写一个死循环代码便于我们进行观察:

  左边是我们还处于死循环当中的程序,右边是我们使用特定的指令查找到的进程编号,(具体的指令会在下一篇博客当中详细讲解)

  之后通过进程编号进行观察文件夹当中的内容:

  详细展示如下:

  可能这一大部分大家都看不懂,当然我们也不需要看懂,我们只需要了解一个知识点即可。

  操作系统在管理进程信息的时候不仅仅是管理进程的代码或者是进程号等信息。会在形成一个特定的结构体之后将这个结构体和我们的代码同时存储到相应的序列当中。当然存储的代码也并不是我们平时编写的代码,它仅仅是一串地址。操作系统可以通过这串地址找到我们所编写的代码。

测试结果如下:

  其中cwd表示的是当前代码所存储的路径的地址。我们在编写代码的时候如果需要在当前目录下面创建指定的文件就是通过这个目录所进行创建的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/95830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉树的经典OJ题

判断平衡二叉树 1.题目2.分析3.时间复杂度为O(N^2)的代码4.优化时间复杂度的代码 1.题目 2.分析 3.时间复杂度为O(N^2)的代码 4.优化时间复杂度的代码

总结三:计算机网络面经

文章目录 1、简述静态路由和动态路由?2、说说有哪些路由协议,都是如何更新的?3、简述域名解析过程,本机如何干预域名解析?4、简述 DNS 查询服务器的基本流程是什么?DNS 劫持是什么?5、简述网关的…

Python之字符串判断

Python之字符串判断 首尾判断 endswith(suffix[, start[, end]]) -> bool 在指定的区间[start, end),字符串是否是suffix结尾 startswith(prefix[, start[, end]]) -> bool 在指定的区间[start, end),字符串是否是prefix开头 a 1,2,3,a,b,c #…

re学习(38)HGAME2020-re-Level-Week1-maze

题目描述 You won’t figure out anything if you give in to fear. 学习资料: https://ctf-wiki.github.io/ctf-wiki/reverse/maze/maze-zh/ 附加说明:请走最短路线 题解 分析题目 一看题目:maze 可以确定是一个迷宫题 void __fastcall __noreturn…

【java爬虫】使用vue+element-plus编写一个简单的管理页面

前言 前面我们已经将某宝联盟的数据获取下来了,并且编写了一个接口将数据返回,现在我们需要使用vueelement-plus编写一个简单的管理页面进行数据展示,由于第一次使用vue编写前端项目,所以只是编写了一个非常简单的页面。 项目结…

关于PointHeadBox类的理解

forward函数 def forward(self, batch_dict):"""Args:batch_dict:batch_size:point_features: (N1 N2 N3 ..., C) or (B, N, C)point_features_before_fusion: (N1 N2 N3 ..., C)point_coords: (N1 N2 N3 ..., 4) [bs_idx, x, y, z]point_labels (opti…

【计算机组成 课程笔记】7.1 存储层次结构概况

课程链接: 计算机组成_北京大学_中国大学MOOC(慕课) 7 - 1 - 701-存储层次结构概况(15-14--)_哔哩哔哩_bilibili 这是我们已经非常熟悉的冯诺依曼计算机结构, 其中和存储功能相关的部件有:存储器和外部记录介质肯定具有…

Python---构造方法

构造方法: __init__ Python类可以使用:__init__()方法,称之为构造方法 可以实现: 在创建类对象(构造类)的时候,:会自动执行 将传入参数自动传递给__init__()方法使用 例子: class Student:# 可以不用写# name None# age None# tel None…

EM@等幂和差公式

文章目录 abstract等幂差等比数列性质推导二项式展开的思路 等幂和奇次方幂之和偶次方幂之和证明等幂差 ref abstract 讨论整数指数幂中等幂和差的展开 这里讨论的等幂指的是指数相等的两个幂 并且仅在整数指数幂范围内讨论,实指数幂范围内此处不讨论 两个n次方幂值差展开公…

80%测试员被骗,关于jmeter 的一个弥天大谎!

jmeter是目前大家都喜欢用的一款性能测试工具,因为它小巧、简单易上手,所以很多人都愿意用它来做接口测试或者性能测试,因此,在目前企业中,使用各个jmeter的版本都有,其中以jmeter3.x、4.x的应该居多。 但是…

Waves 14混音特效插件合集mac/win

Waves14是一款音频处理软件,主要用于音频编辑、混音和母带处理。该软件提供了各种插件,包括EQ、压缩、混响、延迟、失真等,以及一些专业的音频处理工具,如L2限幅器、Linear Phase EQ和多频道扬声器管理。 Mac软件下载:…

凉鞋的 Unity 笔记 106. 第二轮循环场景视图Sprite Renderer

106. 第二轮循环&场景视图&Sprite Renderer 从这一篇开始,我们开始进行第二轮循环。 这次我们至少能够在游戏运行窗口看到一些东西。 首先还是在场景层次窗口进行编辑,先创建一个 Sprite,操作如下: 创建后,会在 Scene …

华为OD机试真题-路灯照明问题(Java/C++/Go/Python)

【华为OD机试真题】路灯照明问题(Java/C++/Go/Python) 题目描述 在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。 每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。 输入描述 第一行为一个数N…

【Java互联网技术】MinIO分布式文件存储服务

应用场景 互联网海量非结构化数据的存储 基本概念 Object:存储的基本对象,如文件、字节流等 Bucket:存储Object的逻辑空间,相当于顶层文件夹 Drive:存储数据的磁盘,在MinIO启动时,以参数的…

Nginx与Spring Boot的错误模拟实践:探索502和504错误的原因

文章目录 前言502和504区别---都是Nginx返回的access.log和error.log介绍SpringBoot结合Nginx实战502 and 504准备工作Nginx配置host配置SpringBoot 502模拟access.logerror.log 504模拟access.logerror.log 500模拟access.logerror.log 总结 前言 刚工作那会,最常…

JMeter接口自动化测试(数据驱动)

之前我们的用例数据都是配置在HTTP请求中,每次需要增加,修改用例都需要打开JMeter重新编辑,当用例越来越多的时候,用例维护起来就越来越麻烦,有没有好的方法来解决这种情况呢?我们可以将用例的数据存放在cs…

MyBatis过时了吗?

点击下方“JavaEdge”,选择“设为星标” 第一时间关注技术干货! 免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案…

3263页学习资料,一本在手,python不愁!

Python3.11已经发布,新的版本速度提升2倍,以弥补与其他编程语言在速度上的缺陷。可以预见Python语言在未来的应用范围会越来越广。 python学习方向建议: 如果你是本科及以下学历,建议你学习以下两个方向 爬虫。简单的爬虫库&am…

手机图片合成gif怎么操作?用这个网站试试

制作gif动图的工具越来越多,但是很多时候使用电脑并不方便,想要在手机上制作gif动图的时候应该怎么办呢?很简单,给大家分享一款无需下载手机浏览器就能操作的gif制作(https://www.gif.cn/)工具-GIF中文网&a…

python mongodb数据查询

要在Python中执行MongoDB查询,需要使用MongoDB的官方Python驱动程序——PyMongo。首先,您需要安装PyMongo,然后连接到MongoDB数据库,执行查询操作。 安装PyMongo: pip install pymongo使用PyMongo连接到MongoDB imp…