设计师可以在哪些网站接单,wordpress+子主题+教程,网站构成三要素,线上设计师是什么文章目录 #x1f4d6; 前言1. 冯诺依曼体系结构1.1 内存存在的意义#xff1a;1.2 程序加载到内存的意义#xff1a;1.3 程序的预加载#xff1a; 2. 认识进程2.1 如何理解管理#xff1a;2.2 什么叫是进程#xff1a;#xff08;初步理解#xff09; 3. 简单认识操作… 文章目录 前言1. 冯·诺依曼体系结构1.1 内存存在的意义1.2 程序加载到内存的意义1.3 程序的预加载 2. 认识进程2.1 如何理解管理2.2 什么叫是进程初步理解 3. 简单认识操作系统3.1 操作系统如何提供服务 4. 查看进程4.1 第一种查看进程的方式4.2 第二种查看进程的方式 5. 对当前路径的理解 前言
在前面我们学习了Liunx的基本指令和权限相关知识还有基本工具的使用有了以上的基础知识我们本章将正式接触操作系统搬好小板凳要开讲了…… 1. 冯·诺依曼体系结构
我们常见的计算机如笔记本。我们不常见的计算机如服务器大部分都遵守冯诺依曼体系。 输入设备 键盘话筒摄像头磁盘网卡……输出设备 显示器音响磁盘网卡显卡……(运算器 控制器)[CPU] 算数计算 逻辑计算存储器 就是内存不是磁盘
出了内存之外剩下的就是外设了~
1.1 内存存在的意义
为什么要有内存?
a. 技术角度 存储速度的差别 cpu的运算速度 寄存器的速度 L1 ~ L3Cache各种缓存Cache 内存 外设磁盘 光盘磁带 b. 数据角度 外设不和CPU直接交互而是和内存交互CPU也是如此。 c. 成本角度 造价 寄存器 内存 磁盘(外设)
如果冯诺依曼体系结构中没有内存的话
那么整个体系的效率是很低下因为是由最慢的设备决定的。计算CPU速度够快但是还是要等外设这既是著名的木桶原理。
当整个体系结构加上内存之后
因为中央处理器只和内存做数据交互输入设备也和内存做交互。所以整个体系的效率就以内存为主要衡量标准。不以外设为标准引入了存储器的设备可以让整体效率以存储器为标准。 内存的意义
有存储器的存在让软件的存在具有了更大的意义。开机的时候就是将操作系统加载到存储器当中。内存对应的最大意义使用较低的钱的成本能够获得较高的性能
补充
中央处理器CPU也会和外说有交互协调数据流向。中央处理器CPU只是个具有运算和控制能力的提现木偶真正让中央处理器去完成计算和某些控制的是整个计算机的大脑叫做软件最具有代表性的就是操作系统是操作系统来控制CPU的。 1.2 程序加载到内存的意义 在我们之前学习编程语言例如C/C时我们都听过这样一句话
自己写的软件/程序编译好之后要运行必须先加载到内存。
为什么
答案就是由体系结构冯·诺依曼体系结构决定的。
具体解释
C/C编译好的程序就必须从磁盘加载到内存要让CPU能够读取。我们编译好的程序是个文件是在磁盘上(外设)CPU读取数据必须通过存储器读取所以也就要求要运行程序就必须将程序先加载到内存因为CPU只会从内存当中读取指令代码和数据。
1.3 程序的预加载
几乎所有的硬件只能被动的完成某种功能不能主动的完成某种功能一般都是要配合软件完成的(OS CPU)开机等待本质是将操作系统加载到内存当中因为体系结构规定CPU要执行代码执行的可不仅仅是我们写的代码还有操作系统的代码所以必须先把操作系统加载到内存这就是预加载。当启动时还没有执行此时数据已经被预加载到了内存CPU可能在进行某种其他的计算这样就能把加载的过程和CPU运算的过程并行起来。操作系统一旦被加载之后在软件层面上就可以预先把将来要访问的数据或文件也可以提前加载到内存当中。
数据在流动的时候从输入到内存从内存到CPUCPU计算处理完将结果写回内存然后定期再刷新到外设。
补充 内存的存在可以去适配外设和CPU之间速度不匹配的问题因为内存的存在可以去预先装载一些常见的内存管理软件数据管理软件就可以将数据以预加载的方式提前放在存储器当中以提高中央处理器读取效率就可以让我们以较高的效率完成计算和存储的任务。 2. 认识进程
2.1 如何理解管理 管理的本质是对数据的管理。
管理的本质不是对被管理对象进行直接管理而是只要拿到被管理对象的所有的相关数据我们对数据的管理就可以体现对对象的管理。 管理的核心理念先描述再组织。
当我们要管理的对象数目巨大例如一个学校的学生而每个学生身上又有大量的属性的时候例如每个学生都有自己的个人信息身高、体重、年龄……大量的数据堆在一起很显然是不好管理的我们可以先将每个对象描述起来例如将每个学生描述为一个结构体结构体内有学生的各种属性然后再将这些结构体组织起来。组织起来的方式有很多这就是我们之前学的数据结构啊。
先描述再组织用C语言或C描述用数据结构组织数据。管理的本质对数据做管理 -- 对数据的管理 -- 对某种数据结构的管理 -- 对数据结构的各种操作增删查改。
重点
其实操作系统是一款软件是一款专门搞管理的软件软件可以管理软件就像人可以管理人一样~ 2.2 什么叫是进程初步理解
进程是一个运行起来的程序。
一般书上都会那么说真的让人理解起来一头雾水脑子里一篇空白进程和程序的区别是什么一个跑一个没跑这是用形容词描述的用名词怎么描述
下面我们来慢慢讲…… 首先我们要知道程序是个文件是存在磁盘上的然后不能简单的认为将程序从磁盘加载到内存这个程序就是进程了就像随便一个人进入学校不能够称之为学生一样。 再者我们要知道操作系统里面可能同时存在大量的进程 操作系统要不要将所有的进程管理起来呢答案是肯定的 对进程的管理本质是不是就是对进程数据的管理答案是肯定的
那我们对进程的管理核心是不是先描述再组织呢答案是肯定的
PCBproccess ctrl block
描述进程的结构体我们叫做PCB也叫做进程控制块而Linux中的task_struct是一款具体的PCB
当一个程序加载到内存时候不仅仅是将代码和数据加载到内存操作系统还要为了管理该进程创建对应的数据结构。 初步认识进程的概念重点
我们把一个进程的task struct结构和对应的可执行程序合起来才叫一个进程。进程 可执行程序 该进程对应的内核数据结构 有大量的进程就必须把进程先描述再组织起来把进程组织起来实际上是把描述进程的进程控制块组织起来。 那我们学习进程到底学的是什么呢
我们学习的是进程控制块里面有什么属性
第一阶段对进程的理解总结 当一个程序从磁盘加载到内存将代码和数据加载到内存只是第一步第二步操作系统为了管理这个进程需要为该进程创建对应的描述该进程的进程控制块PCBLiunx 下叫task struct。只要在内存当中被操作系统管理操作系统实际管的根本不是代码和数据而是管的则是进程的PCB结构体。第一阶段进程的理解程序加载到内存之后的代码和数据以及操作系统为了管理进程所生成的描述进程的进程控制块PCB结构体内核数据结构 代码和数据这二者合起来叫做进程。一个进程有一个PCB描述起来了系统中有大量的PCB只需要将系统中的PCB用数据结构组织起来对应的对进程的管理就变成了对数据结构的增删查改。 3. 简单认识操作系统 3.1 操作系统如何提供服务
计算机和OS设计出来就是为了给人们服务的那么是如何给我们提供服务的呢
我们调用printf函数向显示器打印显示器是硬件所谓的打印本质就是将数据写到硬件上那我们写的C语言能直接访问硬件吗
答案是不能打印不是直接写到硬件上而是通过间接的方式。所有的应用程序都没有资格直接访问硬件因为硬件的管理者是操作系统。操作系统是不相信任何人的不会直接暴露自己的任何数据结构代码逻辑其他数据相关的细节因为我们普通人写的代码或者软件没有资格直接访问硬件需要计算机提供对应的服务。
操作系统是不相信任何人的要防止少数人又要给多数人提供服务所以操作系统是通过给用户提供接口的方式为用户提供服务的~ Linux操作系统是用C语言写的这里所谓的“接口”本质就是C函数 我们学习系统编程本质就是在学习这里的系统接口。
我们如何调用系统调用接口 要是小白的话我们可以通过图形化界面或者是命令行指令来调用系统接口在我们日常的生活中安装卸载软件、本质就将各种资源拷贝到本地磁盘目录下下载还用了网卡。我们只是用了图形化界面点击了一下这就是管理操作。 要是初级工程师就像正在学习的我们会调用C语言的printf函数来将内容打印到显示器上但是我们并没有自己实现printf函数但是我们清楚地知道 链接就是将库里面的代码和我们的代码合起来库中的方法里面一定有对应的方法底层一定有调用系统调用接口只是我们平时不知道而已。
此时上层用中就可以做管理工作开发工作命令行操作。
补充
一门语言跨平台可移植在Windows和Linux下都能选择其对应的接口上层提供的都是printf()原因标准库中用了多态同个接口在不同的平台下实现同一个或者不同的功能。 4. 查看进程 我们自己写的代码编译成为可执行程序启动之后就是一个进程 那么别人写的呢启动之后是不是进程呢肯定算
那么我们之前学习的各种指令执行指令也是进程。
4.1 第一种查看进程的方式 aalljjobsx以特定格式显示
通过ps指令后面的axj几个选项的顺序无所谓这是显示所有的进程。
我们写一个简单的死循环然他一直在跑我们来查看一下它的进程~
结合我们之前学的指令我们可以查看指定的进程 我们调用了grep指令所以这里查看进程的时候也是能显示grep进程的。
显示出前五行
只显示要查看的进程 只要匹配到-v后面的关键字一律不显示。
Windows下是通过双击打开一个进程, 而Linux则是通过./启动在系统中找到可执行程序启动这两者在系统层面上一模一样~ 4.2 第二种查看进程的方式
Linux的根目录下有个proc目录里面放的就是实时的进程 procprocess内存文件系统里面放的是当前系统实时的进程信息。
查看进程的ID 既然proc里面存的是实时的进程那么我们就可以查到当前正在跑的进程 当我们将刚刚的进程结束掉之后再次执行以下mytest这个可执行程序我们发现进程的ID发生了变化 所以重启之后就是一个新的进程了。
我们在proc中打开这个进程可以查看它的详细属性 5. 对当前路径的理解
在我们之前学习C / C语言的时候我们就只是肤浅的理解当路径就是源文件所在的路径。
事实真的是这样吗
答案并不是
我们用ls -al选项来在proce目录中对应的进程中看一下它的更详细的属性 我们可以看到进程当前的工作路径和进程所对应的可执行程序在磁盘上所对应的位置。
我们在源文件代码中加一个新建文件的语句目的就是看看当前路径到底是指的什么
同时我们还将可执行文件移出当前路径 我们再将程序跑起来 其实我们发现了cwd和exe都已经在了test这个路径下并不是源文件的路径。更重要的是我们代码中创建的文本文件此时也是创建在了test这个路径下。这就充分说明了当前路径并不是源文件所在的路径而是进程工作的路径。