尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Linux-进程1

Linux-进程1 目录1.冯-诺依曼体系结构2.操作系统Operator System)2.1概念2.2设计操作系统的目的2.3如何理解“管理”2.4系统调用和函数概念1.冯-诺依曼体系结构相信以下的图在计算机相关的科目里都见到过我们常⻅的计算机如笔记本。我们不常⻅的计算机如服务器⼤部分都遵守冯诺依曼体系。整个计算机是以冯-诺依曼体系结构组织在一起的硬件不可能随意摆放就能运行需要有东西来把硬件组织起来才能形成对应的一套系统。整个硬件也是需要东西来组织所以冯-诺依曼体系就是把所有硬件组织在一起的冯-诺依曼把硬件分为四个部分输入设备输出设备存储器中央处理器。因为中央处理器被分为运算器和控制器也可以称为五大单元。存储器是什么存储器指的是内存对于磁盘ssd这些叫外存输入输出设备的范畴。中央处理器CPU运算器算数运算、逻辑运算。控制器协调设备主要用来执行代码进行逻辑控制的。输入设备类似的有键盘、话筒、摄像头、磁盘、网卡……输出设备类似的有显示器、喇叭、磁盘、网卡、打印机……C/C代码想要形成可执行程序为啥必须得先加载到内存结论输入输出设备外设效率 内存效率 CPU效率为远小于此外离CPU越近效率越高离CPU越远效率越低。此外有这样一个金字塔结构越靠近金字塔最上面越贵但是它也越靠近CPU效率也越高如寄存器而底层则成本更低容量更大但是离CPU更远效率更低如磁盘。因为输入设备和CPU运算速度差别太大了所以不允许CPU直接访问外设而是把输入设备先导入到内存里然后由CPU把数据从内存读取出来出来完后再由内存写回来把数据从存储器导给外设当中。结论1CPU在数据层面不和外设打交道只会和内存打交道。同理外设不和CPU直接打交道只和内存直接打交道。这就好比一个木桶它能装多少水取决于它的最短木板而不取决于它最长的木板一样木桶理论指出效率只由外设决定因为外设效率最低而只有先把数据从外设加载到内存CPU才能运行而如果没有内存那么计算机效率就以外设效率为主我们把程序加载到内存的操作称为预先加载而这些东西都是由冯-诺依曼体系结构决定的结论2内存的本质是外设和CPU的缓存 ---- 计算机的效率以内存速度为主只有先把数据从外设加载到内存CPU才能运行。结论3引入内存使用冯-诺依曼架构可以让用户以不怎么高的成本获得一台效率不错的计算机也就是说内存让计算机更有“性价比”。因为几乎人人都能买得起计算机所以我们进入了互联网时代结论4我们把从输入设备的数据搬到内存中这个步骤称为input而把数据搬到外设这个过程称为output因此我们通常把外设称为IO设备外设包含输入设备输出设备输入为input输出为outputIO外设和内存进行数据交换在C语言中进行数据交换的是scanf和printf在C中进行数据交换的是std::cin和std::cout因此我们把scanf和printf称为IO函数而在stdio.h文件和iostream文件中的很多函数也是IO函数结论5数据流动的本质其实就是拷贝 - 而计算机整体效率本质就是在设备间拷贝的效率。结论6打开文件时在干什么把外设数据预加载到内存里往文件写入内容不是写到外设里而是写到内存里再用内存刷新出去。比如之前我们做的进度条程序就是显示器文件 - 进度条 - 缓存。结论7如何从网络中获取数据我们接受其他设备发出的信息或发出信息到其他设备需要网卡。比如我在QQ与别人聊天那么此时对方发过来一条信息先是网卡先收到信息然后网卡把数据搬到内存里然后才能被CPU处理也就是说发信息本质就是数据流动。如果想要更具体一些两个人互发信息就是用两个冯-诺依曼在通信。只有一个设备能进行网络通信就是网卡而接受信息到我们看得到是这样的顺序网卡加密信息 ————通过内存CPU ————解密内存 ———— 显示器。结论8如何理解两个人之间互传文件呢数据流动怎么走实际上文件也是数据只不过输入设备是磁盘输出设备变成了磁盘本质基于冯-诺依曼结构在进行两者磁盘文件数据拷贝。发送消息本质基于冯-诺依曼结构从自己键盘文件拷贝数据到对方显示器文件对冯诺依曼的理解不能停留在概念上要深⼊到对软件数据流理解上请解释从你登录上qq开始和某位朋友聊天开始数据的流动过程。从你打开窗⼝开始给他发消息到他的到消息之后的数据流动过程。2.操作系统Operator System)2.1概念任何计算机系统都包含一个基本的程序集合称为操作系统OS。笼统的理解操作系统包含两个部分①内核进行进程管理、内存管理、文件管理、驱动管理②其他程序如函数库、shell程序等等。操作系统的定义一款软件 -一款进行软硬件资源管理的软件。我们之后说的操作系统都是狭义上的操作系统。因为操作系统的英文名称为Operator System我们也把操作系统称为OS。如果有一种特性所有语言都有说明它是计算机世界的特性。任何计算机问题都可以通过添加一层软件层来解决 ————本质软硬件体系结构是层次的每一种硬件都有对应驱动程序来驱动软件而软件会和操作系统结合操作系统就会操作系统就会以驱动程序为触角去访问控制硬件。2.2设计操作系统的目的设计操作系统的目的也可以称为设计操作系统的必要性。操作系统对下管理好软硬件资源手段对上给用户提供一个良好稳定、安全、高效的运行环境目的。我们使用计算机大部分情况下是通过软件来访问计算机的硬件资源但是硬件资源是有限的用户需求是无限的这也就要求计算机必须把硬件资源管理好也就是说软硬件系统是层状的在整个计算机软硬件架构中操作系统的定位是一款纯正的“搞管理”的软件。2.3如何理解“管理”我们可以举个例子大学校园常见有三种角色校长、辅导员、自己。学校本质是一套系统学校的老师要合理分配学校资源在学校系统中因为有管理存在所以存在管理者和被管理者在计算机中管理者即操作系统被管理者就是自己。那学校的管理者是谁我们需要解答这个问题需要先解答什么叫做管理者真正的管理者是做决策的做执行的人不能称为管理者。在大学看似是辅导员来管理你但是辅导员只能算决策的执行者。真正的学校体系管理者是校长。那平时我们见不到校长的面他是怎么管理我们的呢结论1管理者要管理被管理者见面不是必要条件。而且就算没有见面事实是管理者会把被管理者安排的明明白白的怎么做到的比如在工作中老板可以通过你的bug和完成代码行数就知道你的能力和你的信息了因此见面不是本质本质是获取你身上的有效信息是管理的必备要素。结论2管理本质是对被管理对象的相关有效数据的管理。即管理本质对数据进行管理那么管理者是怎么直到我的相关数据呢结论3辅导员协助校长获取我的有效信息。校长管理5个人很简单但管理50000个人则比较难管理5个人校长先建了一个Excel表格可以通过辅导员在这个表格里更改的学生信息来看出来哪些人数据变化这就大大提高了效率但是对于管理50000个人用这种方式效率太低了。所以在校长管理5个人时校长时程序员而校长想对50000个学生管理工作就需要用到计算机管理了。于是校长写了C语言程序Excel里面的这些信息时学生的属性虽然每个学生属性对应的东西不一样但都具有对应属性也就是说要管理学生需要先把他们描述起来那么我们该如何描述呢比如我们创建一个结构体来描述一名学生的属性#includeiostream #includestring using namespace std; struct student { private: int age; string name; string xuehao; };也就是说我们把学生的每个属性对应了每一个变量如年龄对应age名字对应name学号对应xuehao等等而我们有50000个学生就可以用50000个结构体描述他们。但是这样也太麻烦了我们需要把这些学生进行方便化的管理因此需要用链表把他们串联起来因此我们可以定义一个指向下一个结构体的指针student* next;并把结构体的数据全部置为public方便main访问然后写出如下代码#includeiostream #includestring using namespace std; struct student { public: int age; string name; string xuehao; student* next;//指向下一个学生的指针 }; int main() { const int TOTAL 50000; // 学生总数 student* listhead nullptr; // 链表头 student* tail nullptr; // 链表尾方便追加 for (int i 1; i TOTAL; i) { // 1. 创建新学生节点 student* p new student; // 2. 填充数据模拟生成 p-age 18 (i % 10); p-name Student_ to_string(i); p-xuehao 2024 to_string(10000 i); p-next nullptr; // 新节点的 next 先指向空 // 3. 挂接到链表尾部 if (listhead nullptr) { // 第一个节点 listhead p; tail p; } else { // 让当前尾节点的 next 指向新节点 tail-next p; // 更新尾指针 tail p; } } // 验证 int count 0; student* cur head; while (cur ! nullptr) { count; cur cur-next; } cout 成功创建并串联了 count 个学生节点 endl; // 释放内存避免内存泄漏 cur head; while (cur ! nullptr) { student* temp cur; cur cur-next; delete temp; } return 0; }如果有人退学了我们直接删除这个结点并让前面的那个人的next指向这个退学的人的next。也就是说校长管理所有人转化成了对链表的管理而如果学生信息发生变化或者少了个学生或多了个学生这些就变成了对链表的增删查改!此时校长就完成了对学生管理工作的建模过程。管理本质就是对数据进行管理做法是先描述成结构体再组织成链表世界管理的本质也是这样C等语言为啥要提供类C等都要提供容器技术比如stl而我们之前做C语言课设可能做过通讯录而通讯录相当于对数组进行管理。学习数据结构本质上就是衡量再组织的问题把数据组织起来也就是如何组织数据的问题回到最开始的问题学校的管理者是校长被管理者是自己而校长对应的是操作系统被管理者自己对应的是硬件辅导员对应的是驱动程序。同理操作系统要管理所有硬件它要先描述再组织。未来操作系统校长要管理所有硬件学生它首先要通过驱动程序辅导员把底层所有数据获取上来填充到每个结点里所以在操作系统内核里管理所有硬件转化成了对象的增删查改如先描述成为结构体#includeiostream #includestring using namespace std; struct hard_device { public: int type; int status; int cap; hard_device* next; };然后再进行组织成链表即可我们能预测一下操作系统内一定存在大量的数据结构而且还会给每一种结构匹配对应的算法也就是说操作系统的核心本质是数据结构。操作系统是用C语言写的99%C语言1%汇编。而描述事物只能用结构体操作系统内部一定存在大量的数据结构所以如果要学好操作系统必须要能了解操作系统内的各种数据结构之后需要看操作系统内核的代码而学好操作系统只要记住这六个字先描述再组织。将来写C/C代码永远先写类再选择合适的容器2.4系统调用和函数概念现实世界很多东西都是层状的如银行基于各种设施形成银行系统所以银行系统可以基于它提供服务而现实生活中不会允许外部人员随意访问银行系统也就是说不允许外部人员直接访问系统内部的相关数据但不能把银行关了。所以银行系统提供了一个一个的小窗口银行窗口或柜台若要访问则需要通过小窗口通过里面工作人员来访问系统对外统一通过窗口来给外部人员访问。操作系统也是一样为我们上层用户提供窗口此时就叫系统调用也属于操作系统的范畴系统调用即操作系统提供的函数。也就是说系统调用的本质保证操作系统被安全访问而我们每个人想要和操作系统交互只能通过系统调用假设你在A学校成绩比较好但B学校想让你代表B学校参加比赛但是B学校不能直接找你而要先找A学校校长再通过校长来找到你。也就是说用户要访问硬件必须要从操作系统访问但是只能通过系统调用才能访问。printf必须先要通过操作系统才行假设有个老大爷如果和银行人员打交道比较麻烦不能表达自己的意思也就是说使用银行人员来访问系统这个渠道是有成本的老大爷不会写字。所以往往有一种人在银行外面叫大堂经理相当于在银行系统之上添加一个工作层大堂经理减少使用窗口的成本。操作系统的系统调用使用成本偏高因为它要先了解操作系统的一些原理但我们不一定懂这个所以在系统调用之上封装了一层软件层在C/C视角这叫C/C标准库。如果程序员不善于使用操作系统就可以使用库当中的方法对系统调用进行封装。因此因为有C/C标准库一个程序员想要操作计算机就只需要学会一门语言即可在应用层当中看到的大部分是库即库和系统调用是上下层关系。如何辨别你调用的函数有无系统调用实际上大部分函数都有系统调用算法大部分不会有系统调用只要你对应的库函数访问了硬件一定调用了系统调用使用计算机的人本质是有开发者纯正的使用者或小白真正的用户啊所以开发了一个上层应用提供图形化界面如安卓系统。把软硬件资源管理好不是目的而是手段经常说安卓是基于Linux内核的是因为从系统调用层到硬件层安卓的开发库是不能变的
返回列表