linux之进程理解(1)

目录

1. 冯诺依曼体系结构

 2. 操作系统(OS)

2.1 概念

2.2 设计OS的目的

2.3 定位

 2.4 理解管理

 3. 系统调用和库函数概念

 4. 补充


1. 冯诺依曼体系结构

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

 截至目前,我们所认识的计算机,都是有一个个的硬件组件组成,硬件的各种连接是根据冯诺依曼体系结构连接

输入单元(设备):包括键盘, 鼠标,扫描仪, 写板,摄像头,网卡等

中央处理器(CPU):含有运算器和控制器等,运算速度非常快

输出单元(设备):显示器,打印机,声卡,磁盘,网卡等

 数据是要在计算机的体系结构中进行流动的,流动的过程中进行数据的处理

从一个设备到另一个设备,本质是一种拷贝!!!

比如输入设备的数据拷贝到存储器,存储器的数据拷贝到cpu等

数据设备间的拷贝效率决定了计算机整机的基本效率

 存储:距离CPU越近,效率越高,成本造价越高(比如寄存器)

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

1. 这里的存储器指的是内存

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

3. 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

4. 一句话,所有设备都只能直接和内存打交道。

 为什么要有内存的存在而不是让输入设备直接与CPPU进行交互?

输入设备(如键盘、鼠标、磁盘等)与 CPU 的速度差异非常大。输入设备的速度相对较慢,而 CPU 的处理速度非常快。如果让输入设备直接与 CPU 进行交互,CPU 在等待输入设备的数据时会处于空闲状态,从而造成资源浪费和系统效率低下。

内存作为介于输入设备和 CPU 之间的缓冲区域,能够存储大量数据,并且可以被 CPU 快速访问。通过在内存中加载数据,CPU 可以随时从内存中读取所需数据,而不必等待输入设备传输数据。此外,多个设备可以共享内存中的数据,实现更高效的数据交换和处理。

内存提供了一个统一的数据存储和处理区域,使得 CPU 可以方便地访问和处理数据。输入设备通常只负责数据输入和输出,而数据的处理和存储更适合由 CPU 和内存来完成。

总的来说:因为输入设备的效率非常低而CPU的效率非常高,一个处理完了一个还在加载数据,类似于木桶原理,有多个木片组成计算机,效率由输入输出设备决定。有了内存后,可以在内存中加载很多数据,cpu读取数据不是从输入设备读取数据了而是从内存中读取数据这样整机效率由内存决定

而且有了内存等其他便宜的存储单元可以使电脑的价格降低

 程序运行为什么要加载到内存中?

程序=代码+数据          程序“数据”都要被CPU访问

程序没有被加载到内存的时候在哪里?在磁盘里,就是一个普通的可执行的二进制文件

又因为磁盘是一个外设设备而CPU只能在内存中读取代码和数据所以注定了你的程序只能从外设加载到内存中然后才能被cpu执行(也就是跑起来)

这就是冯诺依曼体系结构的应用

 对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。

  1. 输入阶段: 当你打开 QQ 软件并开始输入消息时,键盘是输入设备,它会将你输入的字符转换为数字编码并发送给 CPU 进行处理。CPU 接收到键盘输入的数据后,会将数据存储到内存中的输入缓冲区。

  2. 处理阶段: CPU 接收到输入数据后,会调用 QQ 软件的相应功能模块,比如消息发送模块。软件会将你输入的消息数据从内存中读取出来,并进行处理,包括对消息内容的格式化、加密等操作。处理完成后,消息数据会被放入内存中的发送缓冲区等待发送。

  3. 输出阶段: 处理完成的消息数据会被发送到网络接口卡,经过网络协议封装后通过网络连接发送给服务器。服务器接收到消息数据后,会将数据传输给你的朋友所在的设备。

  4. 接收阶段: 朋友的设备接收到消息数据后,CPU 将数据存储到内存中的接收缓冲区。QQ 软件会从接收缓冲区读取消息数据,并展示在聊天窗口中。

在整个过程中,数据的流动遵循了冯·诺依曼计算机体系结构的基本原理,即输入、处理、输出三个步骤。CPU 作为计算机的核心组件负责控制和协调数据在各个部件之间的流动,而内存作为数据存储和传输的中介承担着关键的角色。通过这样的数据流动过程,你和朋友之间的聊天交流得以实现。

 2. 操作系统(OS)

电脑开机时需要几十秒的时间本质是加载我们的操作系统,他是一个为我们进行软硬件管理的软件

比如u盘的插入与弹出是操作系统进行硬件的管理

比如对软件的整个生命周期(下载安装卸载)等是进行软件的管理

2.1 概念

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

笼统的理解(广义),操作系统包括:

操作系统的内核(进程管理,内存管理,文件管理,驱动管理)
操作系统的外壳周边程序(例如函数库,shell程序,图形化程序等等)-给用户提供使用操作系统的方式

狭义的认识:只是操作系统的内核

2.2 设计OS的目的

如果没有操作系统就没有东西管理这些硬件,那么这些硬件是好的还是坏的还是当前什么状态等就无从得知。操作系统通过驱动程序来与硬件设备进行通信和管理,从而获取硬件设备的状态信息,并对其进行控制和监控。

与硬件交互,管理所有的软硬件资源--手段(对下)

为用户程序(应用程序)提供一个良好(稳定的,安全的,高效的)的执行环境--目的(对上)

 OS起到一个承上启下的作用,大概结构图如下:

只有你驱动程序安装了OS才能使用相应的硬件

OS不是对底层yin 

2.3 定位

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

 2.4 理解管理

管理者具有决策权!就比如学校里校长是管理者,学生是被管理者

但是校长和学生之间并没有经常接触但是就能管理好,说明管理者和被管理者不需要经常接触

管理的本质是对被管理者的数据进行管理,拿到你的数据才是目的!

计算机管理硬件:.1. 描述起来,用struct结构体  2. 组织起来,用链表或其他高效的数据结构(用链表等管理数据)           也就是说每个设备我都可以用结构体描述然后用数据结构组织进行增删查改,当计算机管理硬件时,可以使用结构体(struct)来描述每个硬件设备的属性,并使用链表或其他高效的数据结构来组织这些硬件设备。
任何管理都是先把被管理对象描述起来后组织
这就是我们为什么学数据结构,因为数据结构他讨论的是如何对一个一个对象如何管理的学科,不同的数据结构决定了管理的侧重点和效率。就比如我们的容器本质就是数据结构,以及C++所谓的封装本质是描述对象而STL就是组织对象的方式!(STL就是容器)

凡是要对特定的对象进行管理都是先描述(比如c++的类就是描述)后组织

 3. 系统调用和库函数概念

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

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

具体的操作系统图:

有接口是为了操作系统的安全,防止我们用户对操作系统进行破坏,就比如银行一样我们进不去银行的柜台它只提供窗口也是为了安全,为什么只提供窗口因为银行不相信任何人也就是群众中有坏人。
接口的设计确实是为了操作系统的安全性考虑。接口提供了一种受控的方式,让应用程序或用户与操作系统进行交互,同时限制了对操作系统内部的直接访问,从而降低了潜在的破坏风险

 4. 补充

 指针的大小(即地址本身的大小)通常由操作系统的位数决定,而指针运算时的步长则取决于指针所指向的数据类型的大小。

#include <stdio.h>
int main()
{int arr[] = {1,2,3,4,5};short *p = (short*)arr;int i = 0;for(i=0; i<4; i++){*(p+i) = 0;}for(i=0; i<5; i++){printf("%d ", arr[i]);}return 0;
}

结果为0 0 3 4 5

在32位系统上,指针 p 的大小仍然是4个字节,而每次对 p 进行指针运算时,会按照指向的数据类型大小来进行偏移,即每次偏移2个字节。而一个数据是四个字节,所以移动四次是改变两个数据

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

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

相关文章

chrome选项页面options page配置

options 页面用以定制Chrome浏览器扩展程序的运行参数。 通过Chrome 浏览器的“工具 ->更多工具->扩展程序”&#xff0c;打开chrome://extensions页面&#xff0c;可以看到有的Google Chrome扩展程序有“选项Options”链接&#xff0c;如下图所示。单击“选项Options”…

制作镜像与配置推送阿里云仓库

一、制作jdk镜像 1.1、Alpine linux简介 Alpine Linux是一个轻量级的Linux发行版&#xff0c;专注于安全、简洁和高效。它采用了musl libc和BusyBox&#xff0c;使得系统资源占用较少&#xff0c;启动速度较快。 Alpine Linux也提供了一个简单的包管理工具APK&#xff0c;(注…

【计算机网络_应用层】协议定制序列化反序列化

文章目录 1. TCP协议的通信流程2. 应用层协议定制3. 通过“网络计算器”的实现来实现应用层协议定制和序列化3.1 protocol3.2 序列化和反序列化3.2.1 手写序列化和反序列化3.2.2 使用Json库 3.3 数据包读取3.4 服务端设计3.5 最后的源代码和运行结果 1. TCP协议的通信流程 在之…

深入分析Android运行时环境ART:原理、特点与优化策略

摘要 随着移动互联网的快速发展&#xff0c;智能手机的性能和功能日益强大&#xff0c;其中Android操作系统因其开放性和灵活性而占据主导地位。Android运行时环境&#xff08;ART&#xff09;作为执行应用程序代码的关键组件&#xff0c;在系统性能和用户体验方面起着至关重要…

Vue+SpringBoot打造高校学生管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生管理模块2.2 学院课程模块2.3 学生选课模块2.4 成绩管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学院课程表3.2.3 学生选课表3.2.4 学生成绩表 四、系统展示五、核心代码5.1 查询课程5.2 新…

超详细红黑树的模拟实现

前言 有人说设计出AVL树的的人是个大牛&#xff0c;那写红黑树&#xff08;RBTree&#xff09;的人就是天才&#xff01; 上一篇文章&#xff0c;我们已经学习了AVL树&#xff0c;牛牛个人认为AVL树已经够优秀了&#xff0c;那让我们一起探究一下&#xff0c;为什么红黑树比AV…

链表类型题目

文章目录 简介链表的常用技巧两数相加原理代码代码|| 两两交换链表中的节点代码原理 重排链表(重要)原理代码 合并 K 个升序链表代码递归代码 K 个一组翻转链表原理代码 简介 大家好,这里是jiantaoyab,这篇文章给大家带来的是链表相关的题目练习和解析,希望大家能相互讨论进步 …

[线代]自用大纲

部分内容整理自张宇和网络 序 题型分布&#xff1a; 题型单题分值题目数量总分值选择题5315填空题515解答题12112 *一道大题可能用到六部分所有知识 矩阵 性质 k k k倍和乘积行列式 ∣ k A ∣ k n ∣ A ∣ |kA|k^n|A| ∣kA∣kn∣A∣ ∣ A B ∣ ≠ ∣ A ∣ ∣ B ∣ |AB|≠…

如何解决微服务的数据一致性分发问题?

介绍 系统架构微服务化以后,根据微服务独立数据源的思想,每个微服务一般具有各自独立的数据源,但是不同微服务之间难免需要通过数据分发来共享一些数据,这个就是微服务的数据分发问题。Netflix/Airbnb等一线互联网公司的实践[参考附录1/2/3]表明,数据一致性分发能力,是构…

【 10X summary report】怎么看?详细解读笔记

报告内容 在开始正式的分析之前&#xff0c;需要查看在对齐和计数过程中生成的任何总结统计信息。下图是由Cell Ranger工具创建的10X总结报告&#xff0c;在从10X scRNA-seq实验生成计数矩阵时会生成。 The left half of the report describes sequencing and mapping statist…

C++之stack

1、stack简介 stack是实现的一个先进后出&#xff0c;后进先出的容器。它只有一个出口&#xff0c;只能操作最顶端元素。 2、stack库函数 &#xff08;1&#xff09;push() //向栈压入一个元素 &#xff08;2&#xff09;pop() //移除栈顶元素 &#xff08;3…

基于springboot+vue的中国陕西民俗网

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

nginx,php-fpm

一&#xff0c;Nginx是异步非阻塞多进程&#xff0c;io多路复用 1、master进程&#xff1a;管理进程 master进程主要用来管理worker进程&#xff0c;具体包括如下4个主要功能&#xff1a; &#xff08;1&#xff09;接收来自外界的信号。 &#xff08;2&#xff09;向各worker进…

SAP PP学习笔记04 - BOM2 -通过Serial来做简单的BOM变式配置,副明细,BOM状态,BOM明细状态,项目种类,递归BOM

本章继续讲BOM。 本章讲通过Serial来做简单的BOM变式配置。还讲了BOM的相关概念&#xff1a;副明细&#xff0c;BOM状态&#xff0c;BOM明细状态&#xff0c;项目种类&#xff0c;递归BOM 等。 1&#xff0c;通过Serial&#xff08;序列号&#xff09;来做简单的 VC&#xff0…

Some collections -- 2024.3

一、TensorFlow Android (dataset: Mnist) We used TensorFlow to define and train our machine learning model, which can recognize handwritten numbers, called a number classifier model in machine learning terminology. We transform the trained TensorFlow mod…

2024.03.01作业

1. 基于UDP的TFTP文件传输 #include "test.h"#define SER_IP "192.168.1.104" #define SER_PORT 69 #define IP "192.168.191.128" #define PORT 9999enum mode {TFTP_READ 1,TFTP_WRITE 2,TFTP_DATA 3,TFTP_ACK 4,TFTP_ERR 5 };void get_…

高维中介数据:基于交替方向乘子法(ADMM)的高维度单模态中介模型的参数估计(入门+实操)

全文摘要 用于高维度单模态中介模型的参数估计&#xff0c;采用交替方向乘子法&#xff08;ADMM&#xff09;进行计算。该包提供了确切独立筛选&#xff08;SIS&#xff09;功能来提高中介效应的敏感性和特异性&#xff0c;并支持Lasso、弹性网络、路径Lasso和网络约束惩罚等不…

npm 镜像源切换与设置

项目背景 依赖安装中断或响应特别慢。 可以看到当前所用的镜像是 https://registry.npmjs.org 。 切换淘宝镜像之后总算能够安装下来 命令行模式 查看当前镜像源 # 查看当前镜像源 npm config get registry 可以看到默认情况下是官方默认全局镜像 https://registry.npmjs.o…

竞争加剧下,登顶后的瑞幸该做什么?

瑞幸咖啡仅用短短18个月时间从品牌创立到纳斯达克上市&#xff0c;刷新全球最快上市记录。2020年因交易造假事件被勒令退市股价暴跌80%&#xff0c;有人说这个创造了赴美IPO奇迹的“巨婴”将是下一个倒下的ofo。2023年瑞幸咖啡以逆势超速增长领跑咖啡赛道有力回应了市场的质疑&…

Java多线程实现发布和订阅

目录 简介 步骤 1: 定义消息类 步骤 2: 创建发布者 步骤 3: 创建订阅者 步骤 4: 实现发布-订阅模型 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡…