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

这篇具有很好参考价值的文章主要介绍了1.计算机是如何工作的(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

4.编程语言(Program Language)

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

4.1程序(Program)

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

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

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

4.2早期编程

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

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

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

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

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

4.3编程语言发展

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

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

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

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

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

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

5.操作系统(Operating System)

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

5.1操作系统的定位

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 进程的身份标识符.(唯一的数字)

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

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 机制,它除了支持同主机两个进程间通信,还支持同一网络内部非同一主机上的进程间进行通信。

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

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘文章来源地址https://www.toymoban.com/news/detail-508976.html

到了这里,关于1.计算机是如何工作的(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机组成原理(2)各个硬件的工作原理

    (1)存储体(M) 1、存储单元 :每个存储单元存放一串二进制代码。 2、存储字(word) :存储单元中二进制代码的组合。 3、存储字长 :存储单元中二进制代码的位数,一般是 8bit 的倍数。 4、存储元件 (存储元):即存储二进制的电子元件,每个存储元件可存 1bit。 MAR位数

    2024年02月13日
    浏览(36)
  • 网上邻居无法查看工作组计算机怎么办

    无法查看工作组计算机怎么办? 图一 无法查看工作组计算机 ◆解决方法:对网络进行设置 1、在网上邻居——“网络任务”下单击“设置家庭或小型办公网络” 图二 设置Windows XP网络 2、单击“设置家庭或小型办公网络”弹出网络安装向导:  图三 网络安装向导开始 图四

    2024年02月06日
    浏览(33)
  • 计算机视觉 激光雷达结合无监督学习进行物体检测的工作原理

            激光雷达是目前正在改变世界的传感器。它集成在自动驾驶汽车、自主无人机、机器人、卫星、火箭等中。该传感器使用激光束了解世界,并测量激光击中目标返回所需的时间,输出是点云信息,利用这些信息,我们可以从3D点云中查找障碍物。         从自

    2024年02月07日
    浏览(33)
  • Part1:使用 TensorFlow 和 Keras 的 NeRF计算机图形学和深度学习——计算机图形学世界中相机的工作原理

    是否有一种方法可以仅从一个场景多张不同视角的照片中捕获整个3D场景? 有。 NeRF:将场景表示为用于视图合成的神经辐射场中(NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis),Mildenhall等人(2020)的论文解答了这个问题。NeRF的更简单实现赢得了 TensorFlow社区聚光

    2024年02月07日
    浏览(30)
  • SNMP 计算机网络管理 实验3(二)SNMP协议工作原理验证与分析

    ⬜⬜⬜ 🐰🟧🟨🟩🟦🟪(*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 🙉联系作者🙈by QQ:813942269🐧 🌈致亲爱的读者:很高兴你能看到我的文章,希望我的文章可以帮助到你,祝万事

    2024年02月11日
    浏览(22)
  • SNMP 计算机网络管理 实验3(三) SNMP协议工作原理验证与分析

    一、实验目的     学习捕获SNMP报文,通过报文分析理解SNMP协议的工作过程。 二、实验内容与设计思想 实验内容:编写代码,测试   1)使用snmputilg发送SNMP数据包; 使用wireshark抓包;使用netstat -an查看代理站TCP/UDP连接表,分析并验证SNMP协议的工作过程;   2)自行挑选MIB-2功

    2024年02月11日
    浏览(28)
  • 【为什么计算机老师不转行做薪资更高的程序员工作?】

    至于为什么一些计算机老师没有选择从事薪资更高的程序员工作,有很多原因。首先,人们的职业选择因素多样化,不仅仅取决于薪资。有些老师可能对教学工作有着浓厚的兴趣,并享受与学生交流和知识传授的过程。其次,不同的人对工作环境和工作内容有不同的偏好。有

    2024年02月09日
    浏览(31)
  • 【带你深挖计算机底层逻辑,带你认清CPU与主存之间的工作原理】

    计算机底层原理 文章目录 系列文章目录 前言 一、什么是主机 二、CPU 三、两类存储器 总结         带你深入理解计算机底层原理,为日后写出更健壮更安全更高效的代码打下坚实的基础,计算机硬件最底层的实现就如同建筑物的地基,清晰地掌握底层原理对大家将来编程

    2023年04月19日
    浏览(28)
  • 计算机毕设 大数据工作岗位数据分析与可视化 - python flask

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包