计算机速成课Crash Course - 18. 操作系统

今天继续计算机速成课Crash Course的系列讲解。

更多技术文章,全网首发公众号 “摸鱼IT” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!

计算机速成课Crash Course - 17. 集成电路&摩尔定律

18. 操作系统

1940,1950 年代的电脑,每次只能运行一个程序,程序员在打孔纸卡上写程序,然后拿到一个计算机房间, 交给操作员,等计算机空下来了,操作员会把程序放入,然后运行,输出结果,停机。

以前计算机慢,这种手动做法可以接受,运行一个程序通常要几小时,几天甚至几周。

但上集说过,计算机越来越快,越来越快,指数级增长!很快,放程序的时间比程序运行时间还长我们需要一种方式,让计算机自动运作,于是"操作系统"诞生了。

操作系统,简称 OS,其实也是程序,但它有操作硬件的特殊权限,可以运行和管理其它程序。操作系统一般是开机第一个启动的程序,其他所有程序都由操作系统启动。

操作系统开始于 1950 年代,那时计算机开始变得更强大更流行。

第一个操作系统加强了程序加载方式,之前只能一次给一个程序,现在可以一次多个,当计算机运行完一个程序,会自动运行下一个程序,这样就不会浪费时间,找下一个程序的纸卡,这叫“批处理”。

电脑变得更快更便宜,开始在出现在世界各地,特别是大学和政府办公室。很快,人们开始分享软件,但有一个问题,在哈佛1号和 ENIAC 那个时代,计算都是一次性的,程序员只需要给那"一台"机器写代码。

处理器,读卡器,打印机都是已知的,但随着电脑越来越普遍,计算机配置并不总是相同的,比如计算机可能有相同 CPU,但不同的打印机,这对程序员很痛苦。

不仅要担心写程序,还要担心程序怎么和不同型号打印机交互,以及计算机连着的其他设备,这些统称"外部设备"。

和早期的外部设备交互,是非常底层的,程序员要了解设备的硬件细节,加重问题的是,程序员很少能拿到所有型号的设备来测代码,所以一般是阅读手册来写代码,祈祷能正常运行。

现在是"即插即用",以前是"祈祷能用",这很糟糕,所以为了程序员写软件更容易。

操作系统充当软件和硬件之间的媒介,更具体地说,操作系统提供 API 来抽象硬件,叫"设备驱动程序",程序员可以用标准化机制和输入输出硬件(I/O)交互。

比如,程序员只需调用 print(highscore),操作系统会处理输到纸上的具体细节。

到 1950 年代尾声,电脑已经非常快了,处理器经常闲着,等待慢的机械设备(比如打印机和读卡器),程序阻塞在 I/O 上,而昂贵的处理器则在度假,就是放松啥也不做。

50年代后期,英国曼彻斯特大学开始研发世界上第一台超级计算机,Atlas,他们知道机器会超级快,所以需要一种方式来最大限度的利用它。

他们的解决方案是一个程序叫 Atlas Supervisor,于1962年完成,这个操作系统,不仅像更早期的批处理系统那样,能自动加载程序,还能在单个 CPU 上同时运行几个程序,它通过调度来做到这一点。

假设 Atlas 上有一个游戏在运行,并且我们调用一个函数 print(highscore),它让 Atlas 打印一个叫 highscore 的变量值,让朋友知道 我是最高分冠军。

print 函数运行需要一点时间,大概上千个时钟周期,但因为打印机比 CPU 慢,与其等着它完成操作,但因为打印机比 CPU 慢,与其等着它完成操作,Atlas 会把程序休眠,运行另一个程序,最终, 打印机会告诉 Atlas, 打印已完成,Atlas 会把程序标记成可继续运行,之后在某时刻会安排给 CPU 运行,并继续 print 语句之后的下一行代码。

这样, Atlas 可以在 CPU 上运行一个程序,同时另一个程序在打印数据,同时另一个程序读数据。

Atlas 的工程师做的还要多,配了4台纸带读取器,4台纸带打孔机,多达8个磁带驱动器,使多个程序可以同时运行,在单个 CPU 上共享时间,操作系统的这种能力叫"多任务处理"。

同时运行多个程序有个问题,每个程序都会占一些内存,当切换到另一个程序时,我们不能丢失数据,解决办法是:给每个程序分配专属内存块。

举个例子,假设计算机一共有 10000 个内存位置,程序 A 分配到内存地址 0 到 999,而程序 B 分配到内存地址 1000 到 1999,以此类推。

如果一个程序请求更多内存,操作系统会决定是否同意,如果同意,分配哪些内存块,这种灵活性很好,但带来一个奇怪的后果,程序 A 可能会分配到非连续的内存块,比如内存地址 0 到 999,以及 2000 到 2999。

这只是个简单例子,真正的程序可能会分配到内存中数十个地方,你可能想到了,这对程序员来说很难跟踪。

也许内存里有一长串销售额,每天下班后要算销售总额,但列表 存在一堆不连续的内存块里,为了隐藏这种复杂性,操作系统会把内存地址进行 "虚拟化",这叫 "虚拟内存",程序可以假定内存总是从地址0开始,简单又一致,而实际物理位置,被操作系统隐藏和抽象了。

一层新的抽象!

用程序 B 来举例,它被分配了内存地址 1000 到 1999,对程序 B 而言,它看到的地址是 0 到 999,操作系统会自动处理,虚拟内存和物理内存之间的映射,如果程序 B 要地址 42,实际上是物理地址 1042,这种内存地址的虚拟化,对程序 A 甚至更有用。

在例子中,A 被分配了两块隔开的内存,程序 A 不知道这点,以 A 的视角,它有 2000 个连续地址,当程序 A 读内存地址 999 时,会刚好映射到物理内存地址 999。

但如果程序 A 读下一个地址 1000,会映射到物理地址 2000,这种机制使程序的内存大小可以灵活增减,叫"动态内存分配"。

对程序来说,内存看起来是连续的,它简化了一切,为操作系统同时运行多个程序,提供了极大的灵活性,给程序分配专用的内存范围,另一个好处是 这样隔离起来会更好。

如果一个程序出错,开始写乱七八糟的数据,它只能捣乱自己的内存,不会影响到其它程序,这叫 "内存保护"。

防止恶意软件(如病毒)也很有用。例如,我们不希望其他程序有能力读或改邮件程序的内存,如果有这种权限,恶意软件可能以你的名义发邮件,甚至窃取个人信息,一点都不好!

Atlas 既有"虚拟内存"也有"内存保护",是第一台支持这些功能的计算机和操作系统!

到 1970 年代,计算机足够快且便宜,大学会买电脑让学生用,计算机不仅能同时运行多个程序,还能让多用户能同时访问,多个用户用"终端"来访问计算机。

"终端"只是键盘+屏幕,连到主计算机,终端本身没有处理能力,冰箱大小的计算机可能有50个终端,能让50个用户使用,这时操作系统不但要处理多个程序,还要处理多个用户,为了确保其中一个人不会占满计算机资源,开发了“分时操作系统”。

意思是每个用户只能用一小部分处理器,内存等,因为电脑很快,即使拿到 1/50 的资源也足以完成许多任务。

早期分时操作系统中,最有影响力的是Multics(多任务信息与计算系统)于 1969 年发布。

Multics 是第一个,从设计时就考虑到安全的操作系统,开发人员不希望恶意用户访问不该访问的数据。比如学生假装成教授,访问期末考试的文件,这导致 Multics 的复杂度超过当时的平均水准。

操作系统会占大约 1 Mb 内存,这在当时很多!可能是内存的一半,只拿来运行操作系统!

Multics 的研究人员之一 Dennis Ritchie 曾说过,"阻碍 Multics 获得商业成功的一个明显问题是从某种方面来说,它被过度设计了,功能太多了"。

所以 Dennis 和另一个 Multics 研究员,Ken Thompson 联手打造新的操作系统,叫 Unix。

他们想把操作系统分成两部分:

首先是操作系统的核心功能,如内存管理,多任务和输入/输出处理,这叫"内核"。

第二部分是一堆有用的工具,但它们不是内核的一部分(比如程序和运行库),紧凑的内核意味着功能没有那么全面。

Multics 的另一个开发者 Tom Van Vleck 回忆说:"我对 Dennis 说,我在 Multics 写的一半代码都是错误恢复代码"。他说:"Unix 不会有这些东西,如果有错误发生,我们就让内核"恐慌"(panic),当调用它时,机器会崩溃,你得在走廊里大喊,"嘿,重启电脑"。

你可能听过 "内核恐慌"(kernel panic),这就是这个词的来源,内核如果崩溃,没有办法恢复,所以调用一个叫"恐慌"(panic)的函数,起初只是打印"恐慌"一词,然后无限循环。

这种简单性意味着,Unix 可以在更便宜更多的硬件上运行,使 Unix 在 Dennis 和 Ken 工作的贝尔实验室大受欢迎。

越来越多开发人员用 Unix 写程序和运行程序,工具数量日益增长。

1971 年发布后不久,就有人写了不同编程语言的编译器,甚至文字处理器,使得 Unix 迅速成为1970~80年代最流行的操作系统之一。

到 1980 年代早期,计算机的价格降到普通人买得起,这些叫"个人电脑"或"家庭电脑",这些电脑比大型主机简单得多,主机一般在大学,公司和政府,因此操作系统也得简单。

举例,微软的磁盘操作系统(MS-DOS)只有 160 kB,一张磁盘就可以容纳,于 1981 年发布,成为早期家用电脑最受欢迎的操作系统,虽然缺少"多任务"和"保护内存"这样功能,意味着程序经常使系统崩溃,虽然很讨厌但还可以接受,因为用户可以重启。

哪怕是微软 1985 年发布的早期 Windows,虽然在 90 年代很流行,但却缺乏"内存保护",当程序行为不当时,就会"蓝屏",代表程序崩溃的非常严重,把系统也带崩溃了。

幸运的是,新版Windows有更好的保护,不会经常崩溃。

如今的计算机 有现代操作系统,比如 Mac OS X,Windows 10 ,NLinux,iOS和Android。

操作系统依然有"多任务, "虚拟内存", "内存保护",因此可以同时运行多个程序:一边在浏览器看 YouTube,一边在 Photoshop 修图,用 Spotify 放音乐,同步 Dropbox。

如果没有操作系统这几十年的发展,这些都不可能,当然,我们也需要地方放程序,下节课会讨论。


以上内容就是 18. 操作系统 的内容,感兴趣的同学记得点赞、关注、转发、收藏哦!

我会不定期发布课程的讲解!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rime中州韵小狼毫 词组注释 滤镜

在rime中州韵小狼毫 联想词组 滤镜一文中,我们通过Filter滤镜功能配置了联想词组的功能,这使得我们在输入一些关键词汇时,可以联想补充一些附加的词组,例如我输入“手机”,就可以联想补充对应的手机号,如下…

Kali Linux —— 漏洞分析工具

Cisco-torch与Global Exploiter专攻Cisco漏洞 一、Cisco 工具 Kali 有许多工具,比如信息收集工具、密码爆破工具等等,还有一些可用于攻击 Cisco 路由器的工具。Cisco-torch就是这样,用于大规模扫描、指纹识别和利用的工具之一。 打开终端控…

关于CAD导入**地球的一些问题讨论

先上示例: 上图是将北京王佐停车场的红线CAD图导入到图新地球效果,如果看官正是需要这样的效果,那么请你继续往下看,全是干货! 在地球中导入CAD图可以做为电子沙盘。对于工程人来说,是极有帮助的。以前一直用谷歌地球,大约在2020年左右,就被和谐了。当时感觉挺可惜的。…

[渗透测试学习] Surveillance -HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描端口 nmap -sV -sC -v -p- --min-rate 1000 10.10.11.245扫出来两个端口,其中80端口有http服务并且重定向到surveillance.htb 那么我们添加下域名然后访问80端口,发现是企业网站尝试扫描子域名和目录无果后,用Wappalyzer插…

【STM32】HAL库的STOP低功耗模式UART串口唤醒BUG,第一个接收字节出错的问题(尚未解决,疑难杂症)

【STM32】HAL库的STOP低功耗模式UART串口唤醒BUG,第一个接收字节出错的问题(尚未解决,疑难杂症) 文章目录 BUG复现调试代码推测原因及改进方案尝试中断时钟供电外设唤醒方式校验码硬件问题 切换到STOP0模式尝试最终结论和猜想附录…

社区团购配送超市与小程序的共赢之路

对于社区服务来说,搭建一个小程序可以提供更加便捷、高效的服务,提升用户体验。下面我们将详细介绍如何通过乔拓云第三方平台搭建一个社区团购小程序。 首先,你需要打开乔拓云第三方平台,这是一个专门为小程序开发提供的平台。在浏…

戴尔服务器有8条内存条,开机有一条内存条自检提示出错,可以不用管他吗,有影响吗?

环境 戴尔R730 问题描述 戴尔服务器有8条内存条,开机有一条内存条自检提示出错,可以不用管他吗,有影响吗? 提示B1内存有问题 解决方案 不能,有影响,安装系统时卡住在启动节目无法正常安装,…

【PyQt5设计】:自动点击神器 - 解决重复性的点击和输入操作

文章目录 自动点击神器介绍测试窗口介绍自动点击神器的使用教程资源领取注意事项 自动点击神器介绍 本次使用PyQt5设计的【自动点击神器】旨在解决重复性的点击工作,解放双手,具有及时性和准确性,可选择坐标位置或图片两种方式实现鼠标的定位…

【Linux】Linux系统编程——Linux目录结构

Linux的文件系统呈现为一种树状结构,以根目录/为最顶层,其下分布着各种不同的子目录,每个目录都有其特定的用途和功能。下面是Linux目录结构的详细介绍: 1. 根目录 / 根目录是整个文件系统的基础。所有的目录和文件都从这里开始…

亚信安慧AntDB数据库容灾复制原理

AntDB数据库作为通信运营商领域的杰出的数据服务提供者,一直以来都十分重视数据安全问题,不断通过技术进步、方案创新等方式提升数据容灾能力。在信息化的时代,数据已经成为了重要的资源,对于企业来说,如何存储和管理这…

RK3399平台入门到精通系列讲解(驱动篇)eventpoll结构体详解

🚀返回总目录 文章目录 一、eventpoll 结构体二 、epitem 结构体三、eppoll_entry 结构体eventpoll 结构体:eventpoll 结构体是 epoll 在内核中的核心结构epitem 结构体:epitem 结构体用于表示 epoll 实例中的事件项eppoll_entry 结构体:它的作用就是关联Socket等待队列中…

动态规划day03

343. 整数拆分(第二次做还是没弄明白) 力扣题目链接(opens new window) 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2输出: 1解释: 2 1 1, 1 1 1。 示例 2: 输入: …

植物大战僵尸-C语言搭建童年游戏(easyx)

游戏索引 游戏名称&#xff1a;植物大战僵尸 游戏介绍&#xff1a; 本游戏是在B站博主<程序员Rock>的视频指导下完成 想学的更详细的小伙伴可以移步到<程序员Rock>视频 语言项目&#xff1a;完整版植物大战僵尸&#xff01;可能是B站最好的植物大战僵尸教程了&…

【高等数学之不定积分】

一、什么是不定积分? 我们可以简单地从英文层面来基础剖析一下&#xff0c;什么是不定积分? 1.1、基本概念 小tips: 二、不定积分运算法则 三、常用积分公式 四、第一类换元积分法 4.1、定义 4.2、常用凑微分公式 4.3、小calculate 五、第二类换元积分法 5.1、定义 …

2024年云服务器配置推荐,看看哪家便宜?

作为多年站长使市面上大多数的云厂商的云服务器都使用过&#xff0c;很多特价云服务器都是新用户专享的&#xff0c;本文有老用户特价云服务器&#xff0c;阿腾云atengyun.com有多个网站、小程序等&#xff0c;国内头部云厂商阿里云、腾讯云、华为云、UCloud、京东云都有用过&a…

如何使用宝塔面板部署Inis博客并实现无公网ip环境远程访问

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总…

面试题-DAG 有向无环图

有向无环图用于解决前后依赖问题&#xff0c;在Apollo中用于各个组件的依赖管理。 在算法面试中&#xff0c;有很多相关题目 比如排课问题&#xff0c;有先修课比如启动问题&#xff0c;需要先启动1&#xff0c;才能启动2 概念 顶点&#xff1a; 图中的一个点&#xff0c;比…

shell exit和return的区别

exit和return的区别 exit 可放在shell脚本中任意位置。表示随时结束运行程序的这个进程&#xff0c;并删除进程使用的内存空间&#xff0c;同时把错误信息返回给父进程。 return 是调用堆栈的返回&#xff0c;返回函数值并退出函数&#xff0c;一般用在函数方法体内。 [Ref]…

编译原理-2022期末考试解析

【前言】 这是2022年的期末考试卷&#xff0c;题目还是比较正的&#xff0c;涵盖了词法分析&#xff0c;语法分析&#xff0c;语法制导翻译&#xff0c;优化。从这一年开始&#xff0c;优化的部分分值开始提高&#xff08;这是最后学的部分&#xff09;。 一、词法分析&#xf…

数学经典教材有什么?

有本书叫做《自然哲学的数学原理》&#xff0c;是牛顿写的&#xff0c;读完之后你就会感叹牛顿的厉害之处! 原文完整版PDF&#xff1a;https://pan.quark.cn/s/5d5eac2e56af 那玩意真的是人写出来的么… 现代教材把牛顿力学简化成三定律&#xff0c;当然觉得很简单。只有读了原…