1.计算机是如何工作的(下)

文章目录

  • 4.编程语言(Program Language)
    • 4.1程序(Program)
    • 4.2早期编程
    • 4.3编程语言发展
  • 5.操作系统(Operating System)
    • 5.1操作系统的定位
    • 5.2什么是进程/任务(Process/Task)
    • 5.3进程控制块抽象(PCB Process Control Block)
    • 5.4CPU 分配 —— 进程调度(Process Scheduling)
    • 5.5内存分配 —— 内存管理(Memory Manage)
    • 5.6进程间通信(Inter Process Communication)

大家好,我是晓星航。今天为大家带来的是 计算机是如何工作的(下) 相关的讲解!😀

4.编程语言(Program Language)

这一节,我们借助上一节制作的 CPU 和 内存,来尝试还原下我们已经熟悉的编程语言,例如 Java 是如何和 CPU 指令对应起来的。

4.1程序(Program)

所谓程序,就是一组指令以及这组指令要处理的数据。狭义上来说,程序对我们来说,通常表现为一组文件。

程序 = 指令 + 指令要处理的数据。

4.2早期编程

很久以前,那还是我用Win98的时候有次我系统崩溃了,因为我是电脑白痴,我朋友给我介绍了一个高手来帮我修电脑。 他看了一下电脑,问我有没有98的盘,我说没有。 他想了一下,叫我把固定电话拿给他,我想修电脑要电话干什么,但人家是高手,我也不好说什么,就把电话拔下来给他了。 他把电话线空着的一头接在电脑的一个插孔内,然落后入了dos,然后就开始在电话上不停的按着键,他按键的速度异常快,但是只按0,1两个键,我搞不懂这有什么用, 但也不敢问,看了半个多小时,他还是不停的按这两个键,两性,我徐徐的有些困,我问他这东西要搞多久,他说要几个小时,我给他倒了杯茶,就一个人去隔壁睡觉了。 醒来的时候,一看已经过了4个多小时,我起身到隔壁,看见他正在98里面调试,过了一会儿,他说,你试试,我坐上椅子用了一下,真的好了,我当时也不懂电脑,谢过人家就走了。 后来我慢慢对电脑有了了解,终于了解,原来当时那位高手是用机器语言编了一个98系统,我后来问我朋友那位高手的下落,我朋友说前几年去了美国之后,杳无音讯…

这是一个早先流传的趣味小故事,当然这件事不是真实的。但最早的电脑,要进行编程,是真的需要用0、1进行编程的(Σ(っ °Д °;)っ)

下面图给大家展示了 Altair 8800 计算机,是最早的一批微型电脑。用户需要控制开关,一个一个 bit 的将程序录入该电脑中。

如果要求计算机的用户都必须使用二进制编程,那大家都要疯掉了,这可是一件门槛太高的事情了。所以编程语言应运而生了。

4.3编程语言发展

为了提升编程效率,最早创造了汇编语言的概念。其实汇编语言和机器语言(也就是指令)直接是完全一一对应的,只是相对于 0、1 这些数字,发明了一些帮助人类记忆和理解的符号将其对应起来,也就是我们上面看到的类似 LOAD_A、LOAD_B 等。程序员完成编程之后,需要使用汇编器(assembler)将汇编语言翻译成机器语言。

虽然汇编降低了程序员的记忆成本,但要求程序还是必须掌握计算机硬件的所有知识,而且随着计算机厂商越来越多,一次编写的程序往往只适用于一类计算机。这个是远远不够的,所以更为高级的语言诞生了,高级语言屏蔽了硬件细节,让程序员可以站在更高的层面上思考自己的业务。这里以 C 语言为例,程序员完成程序的编写之后,需要使用编译器(compiler)和连接器(linker)将程序翻译成汇编语言,再借助汇编器变成最终的机器语言。

借助封装的思想,我们学习编程变得越来越容易。不过有利则有弊,高度的抽象,导致很多的程序员把计算机视为一个黑箱,完全无法理解自己的程序是如何工作起来的,希望我们大家不要做这种程序员。

我们使用的 Java 语言相对于 C 语言更高级一点,但基本抽象原理上没有太大的差异,我们暂时就不展开说明了。

注意:高级语言的一条语句(Statement)往往对应很多条指令(Instruction)才能完成。

5.操作系统(Operating System)

操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。

5.1操作系统的定位

操作系统由两个基本功能:

1) 防止硬件被时空的应用程序滥用;

2) 向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。

5.2什么是进程/任务(Process/Task)

每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之一。

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;

同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

5.3进程控制块抽象(PCB Process Control Block)

计算机内部要管理任何现实事物,都需要将其抽象成一组有关联的、互为一体的数据。在 Java 语言中,我们可以通过类/对象来描述这一特征。

// 以下代码是 Java 代码的伪码形式,重在说明,无法直接运行
class PCB {// 进程的唯一标识 —— pid;// 进程关联的程序信息,例如哪个程序,加载到内存中的区域等// 分配给该资源使用的各个资源// 进度调度信息(留待下面讲解)
}

这样,每一个 PCB 对象,就代表着一个实实在在运行着的程序,也就是进程。

操作系统再通过这种数据结构,例如线性表、搜索树等将 PCB 对象组织起来,方便管理时进行增删查改的操作。

组织:通过双向链表,来把多个 PCB 给串到一起。(并不是一个单纯的双向链表)

创建一个进程,本质上就是创建一个 PCB 这样的结构体对象,把它插入到链表中。

销毁一个进程,本质上就是把链表的 PCB 节点删除掉。

任务管理器查看到进程列表,本质上就是遍历这个PCB链表。

pid 进程的身份标识符.(唯一的数字)

5.4CPU 分配 —— 进程调度(Process Scheduling)

为了便于讨论和理解,我们大部分的场景下假设是单CPU单核的计算机。

操作系统对CPU资源的分配,采用的是时间模式 —— 不同的进程在不同的时间段去使用 CPU 资源。

并行:微观上同一时刻,两个核心上的进程,就是同时执行的

并发:微观上,同一时刻,一个核心上只能运行一个进程。但是它能够对进程快速的进行切换,比如说 CPU 这个核心上,先运行一下 QQ音乐,再运行以下 cctalk ,再以下LOL,只要切换速度足够快(2.5GHz,每秒运行 25亿条指令),宏观上认识感知不到的

未来除非显式声明,否则谈到并发,就是指并行+并发。

进程状态:

就绪状态:随叫随到。进程随时准备好了去CPU上执行。

运行状态:正在运行。

阻塞状态:短时间内无法到CPU上执行了。比如 进程 在进行密集的 IO 操作,读写数据。

进程也是有优先级的,操作系统进行调度时并不是一碗水端平的。

操作系统在进行进程切换的时候,就需要把进程执行的"中间状态"记录下来,保存好。下次在这个进程上运行时,就可以恢复上次的状态,好继续往下执行。类似于“存档,读档”。

保存,就是把CPU寄存器的值记录保存内存中。

恢复,就是把内存中的值恢复寄存器里去。

5.5内存分配 —— 内存管理(Memory Manage)

操作系统对内存资源的分配,采用的是空间模式 —— 不同进程使用内存中的不同区域,互相之间不会干扰。

程序中获取到的内存地址,并非是真实的物理内存的地址。而是经过了一层抽象,虚拟出来的地址。

C语言中的指针就是虚拟的内存地址,而非真实的物理内存地址。

虚拟地址通过MMU硬件设备转换后对应到物理内存上。因此即使我们前面的虚拟内存越界了,也不会影响我们实际的物理内存地址分配,即不会出现自己编写的程序没问题,但是因为越界导致虚拟内存把其他软件的虚拟地址占用导致其他软件出现报错。

虚拟地址空间主要就是为了避免进程之间相互产生影响。

5.6进程间通信(Inter Process Communication)

如上所述,进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到对方存在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备**”隔离性(Isolation)“。**

但现代的应用,要完成一个复杂的业务需求,往往无法通过一个进程独立完成,总是需要进程和进程进行配合地达到应用的目的,如此,进程之间就需要有进行**“信息交换“**的需求。进程间通信的需求就应运而生。

目前,主流操作系统提供的进程通信机制有如下:

  1. 管道
  2. 共享内存
  3. 文件
  4. 网络
  5. 信号量
  6. 信号

其中,网络是一种相对特殊的 IPC 机制,它除了支持同主机两个进程间通信,还支持同一网络内部非同一主机上的进程间进行通信。

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘

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

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

相关文章

Vector - CAPL - 数据库和CAPL_02

DBLookup 动态读取数据库中的信息 //Transmitter 属性以及数据库属性只能通过 DBLookup 动态读取。 //返回数据库中存储的 DLC on message * {int myAttributeValue;myAttributeValue DBLookup(this).MyAttribute;write(this.Transmitter); // compiler errorwrite(DBLookup(…

押注数字人,百度、科大讯飞“短兵相接”

配图来自Canva可画 近两年,小雀斑、柳夜熙、AYAYI等大量网红数字人的相继出现,以及虚拟数字技术在《指环王》和《阿凡达》以及《刺杀小说家》等电影中的广泛应用,还有北京冬奥会期间数字人在手语解说、节目直播等众多场合亮相,使…

基于Spring Boot的高校实验室信息管理系统设计与实现(Java+spring boot+MySQL+VUE)

获取源码或者论文请私信博主 演示视频: 基于Spring Boot的高校实验室信息管理系统设计与实现(Javaspring bootMySQLVUE) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 后端:Java springboot…

GEE:基于MODIS土地覆盖类型“混交林”的净初级生产力(NPP)的区域统计

作者:CSDN @ _养乐多_ 本文将介绍如何使用Google Earth Engine(GEE)平台提取特定地区的净初级生产力(NPP)的统计信息,并在地图上可视化。通过加载MODIS数据集,并使用GEE提供的函数和方法,能够高效地计算特定地区的净初级生产力的平均值。 文章目录 一、代码详解二、代…

备忘录方法--Fibonacci数列 IV

描述 众所周知,Fibonacci数列是一个著名数列。它的定义是: 本题要求采用第四种方法:备忘录方法,即记忆化搜索。 具体做法是:用数组把曾经求出来的 Fibonacci 数列保存下来,以后要的时候直接取出来。 输入…

【RPC】—Protobuf编码原理

Protobuf编码原理 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ Spring专栏👉https://blog.csdn.net/weixin_53580595/category_12279588.html SpringMVC专…

ASL-QPSO|改进量子粒子群自适应算法及其实现(Matlab)

作者在前面的文章中介绍了量子粒子群算法,量子粒子群算法不但继承粒子群算法的优点,还有它自身计算模型更加简洁,控制参数更少等更加突出的优势,但依然存在着一定的局限性。 例如也会存在着早熟收敛的问题,随着迭代次数…

JAVA每日一练(1)

【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? import java.util.Scanner;/*…

封装一个带el-form的,带el-table的,带分页的,带搜索查询的dialog组件,很使用的二次封装组件。

#封装dialog小案例 提示:这是我工作中封装的代码,很使用,需要的可以拿去, 在我们的代码中往往会出现点击按钮出现弹窗进行操作,那么我们就需要对dialog进行一个二次封装。 下边是大概的一个样式。 ##对组件进行二次…

【雕爷学编程】Arduino动手做(156)---OTTO两足舵机机器人

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

虹科教程 | Linux网络命名空间与虹科PROFINET协议栈的GOAL中间件结合使用

前言 PROFINET是由PI推出的开放式工业以太网标准,它使用TCP/IP等IT标准,并由IEC 61158和IEC 61784 标准化,具有实时功能,并能够无缝集成到现场总线系统中。凭借其技术的开放性、灵活性和性能优势,PROFINET可应用于过程…

网络数据包的监听与分析——IP数据报文分析

1. 抓包工具下载 x下面是一个IP数据报的抓包软件——IPtool的蓝奏云下载链接 https://wwix.lanzoue.com/iaGpy11klpnc 2. iptool使用 下载解压之后,右击以管理员身份运行,打开该exe文件即可 然后点击绿色运行就开始捕包了 随便点一个包进去进行分析就可…