linux之进程理解(1)

news2024/9/23 11:22:33

目录

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.coloradmin.cn/o/1483923.html

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

相关文章

HCIA-Datacom实验指导手册:8 网络编程与自动化基础

HCIA-Datacom实验指导手册&#xff1a;8 网络编程与自动化基础 一、实验介绍&#xff1a;二、实验拓扑&#xff1a;三、实验目的&#xff1a;四、配置步骤&#xff1a;步骤 1 完成交换机的 Telnet 预配置步骤 2 Python 代码编写 五、结果验证六、windows 计划任务程序配置七、 …

全部都有的子序列

思路&#xff08;双指针&#xff09; 先使用Set来存储总共有多少不同的数字&#xff0c;然后我们使用快慢指针去遍历数组&#xff0c;快指针每次遍历到一个数&#xff0c;将其加入到哈希表&#xff0c;哈希表使用pair存储&#xff0c;第一个元素存数字&#xff0c;第二个元素存…

2024最新算法:鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)求解23个基准函数(提供MATLAB代码)

一、鳑鲏鱼优化算法 鳑鲏鱼优化算法&#xff08;Bitterling Fish Optimization&#xff0c;BFO&#xff09;由Lida Zareian 等人于2024年提出。鳑鲏鱼在交配中&#xff0c;雄性和雌性物种相互接近&#xff0c;然后将精子和卵子释放到水中&#xff0c;但这种方法有一个很大的缺…

javaweb请求与响应

前言 前面介绍了对应的服务器端的相关代码。这里开始学习服务器端与客户端的数据请求与响应 这里的仅仅是一个简单的调用&#xff0c;并没有经过servelert接口来进行调用&#xff0c;同前面的一样&#xff0c;我们介绍对应的本地服务器进行的部署项目。 代码 //属于简单的不…

【Memory协议栈】Memory Abstraction Interface模块介绍

目录 前言 正文 1.功能简介 2.关键概念 3.关键类型定义 3.1 MemIf_StatusType 3.2 MemIf_JobResultType 3.3 MemIf_ModeType 4.关键API定义 4.1 MemIf_SetMode 4.2 MemIf_Read 4.3 MemIf_Write 4.4 MemIf_Cancel 4.5 MemIf_GetStatus 4.6 MemIf_GetJobResult 4…

2023年NOC大赛软件创意编程(学而思)赛道图形化小高组复赛试题

目录 第一题 闪烁的星星 第二题 聚沙成塔 第三题 画十字

#WEB前端(DIV、SPAN)

1.实验&#xff1a;DIV、SPAN 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; 类? 4.代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdev…

状态机设计原则系列之效率最大化

检测、搬运类设备,自动运行往往都设计状态机,搬运类对设备节拍往往要求很高,这里我们就需要合理的划分状态机了,使我们的执行效率最大化。有关状态机的系列文章可以查看下面相关文章链接: 1、机器流程控制之建立状态机 https://rxxw-control.blog.csdn.net/article/deta…

智能驾驶规划控制理论学习04-基于车辆运动学的规划方法

目录 一、线性二自由度汽车模型&#xff08;自行车模型&#xff09; 1、二自由度模型概述 2、不同参考点下的状态空间方程 3、前向仿真 二、运动基元生成方法 1、杜宾斯曲线&#xff08;Dubins Curve&#xff09; 2、Reeds Shepp Curve 三、多项式曲线&#xff08;Poly…

多线程(进阶四:线程安全的集合类)

目录 一、多线程环境使用ArrayList 二、多线程环境使用队列 三、多线程环境使用哈希表 1、HashMap 2、Hashtable 3、ConcurrentHashMap (1)缩小了锁的粒度 (2)充分使用了CAS原子操作&#xff0c;减少一些加锁 (3)针对扩容操作的一些优化&#xff08;化整为零&#xff…

优选算法|【双指针】283.移动零

题目 283. 移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12]输出: [1,3,12,0,0]示例 2: 输入…

基于ssm旅社客房收费管理系统+vue

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

PTA L2-005 集合相似度

给定两个整数集合&#xff0c;它们的相似度定义为&#xff1a;Nc​/Nt​100%。其中Nc​是两个集合都有的不相等整数的个数&#xff0c;Nt​是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。 输入格式&#xff1a; 输入第一行给出一个正整数N…

IEEE 802.1Qbv标准解析:为实时应用提供可靠网络基础设施

IEEE 802.1Qbv是IEEE 802.1家族中的一项重要标准&#xff0c;专门针对实时流量的时间敏感性进行优化。这一标准在网络通信领域&#xff0c;特别是在对实时性要求极高的应用中&#xff0c;如音视频传输、工业自动化、智能交通系统等&#xff0c;具有极其重要的地位。 在传统的以…

递推算法(c++)

递推可以说是递归反过来的一种算法&#xff0c;递归是从后往前倒着算&#xff0c;递推是从前往后正着算。 统计每个月兔子的总数 题目描述 有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;一对小兔子长到第三个月后每个月又生一对兔子&#xff0c; …

为什么HashMap的键值可以为null,而ConcurrentHashMap不行?

写在开头 今天在写《HashMap很美好&#xff0c;但线程不安全怎么办&#xff1f;ConcurrentHashMap告诉你答案&#xff01;》这篇文章的时候&#xff0c;漏了一个知识点&#xff0c;知道晚上吃饭的时候才凸显想到&#xff0c;关于ConcurrentHashMap在存储Key与Value的时候&…

ARM架构基础内容

文章目录 前言一、AAPCS二、中断调用过程三、FreeRTOS中任务切换的实质总结 前言 一、AAPCS AAPCS&#xff0c;全称为ARM Architecture Procedure Call Standard&#xff0c;是ARM架构下的过程调用标准。这个标准定义了在ARM架构中函数调用和返回的约定&#xff0c;以确保不同…

文件底层的深入理解(1)

一、文件学习的简单铺垫 我们都知道&#xff0c;文件等于文件内容加上文件属性。访问文件之前都得先通过进程才能打开相应的文件&#xff0c;一个进程可以打开多个文件。修改文件&#xff0c;都是通过执行代码的方式完成修改。要对文件进行修改&#xff08;或其他操作&#xff…

Java 数组(详细)

目录 一、数组的概述 1. 数组的理解&#xff1a; 2. 数组相关的概念&#xff1a; 3. 数组的特点&#xff1a; 4. 数组的分类&#xff1a; 5.数据结构&#xff1a; 二、一维数组 1. 一维数组的声明与初始化 2. 一维数组元素的引用&#xff1a; 3. 数组的属性&#xff1…

微信小程序,h5端自适应登陆方式

微信小程序端只显示登陆(获取opid),h5端显示通过账户密码登陆 例如: 通过下面的变量控制: const isWeixin ref(false); // #ifdef MP-WEIXIN isWeixin.value true; // #endif