0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

你被操作系统欺骗了吗?

Linux阅码场 来源:未知 作者:伍文辉 2018-05-20 09:28 次阅读

1聊天

我们这些程序都安安静静地躺在硬盘的某个角落中,满心期待地等待被主人使用,被操作系统装载, 然后进入内存工作,确切地说: 被CPU阿甘执行。

进入内存是我们的使命, 如果只是在硬盘上呆着, 那我们就是一堆二进制的代码而已,除了占用硬盘的空间,没有什么作用。

但是主人似乎特别钟情于其中的几个程序,像什么浏览器了、 QQ了、Word了、 播放器了, 80%以上的时间都耗在他们上面。

像我这样的小工具calculator,默默无闻也无人问津, 除了躺在硬盘里睡大觉,就是和同一目录下的helloworld聊天。

helloworld也很悲催,自从主人把它创建出来, 只运行过一次, 在屏幕上输出一个 hello world ! 以后就再也没人搭理了。

可是我更悲催, 连一次运行的机会都没有, 我曾经好奇地问helloworld ,在内存中执行到底是什么感觉,这个糊涂蛋竟然说: 木有感觉,代码很快就运行完了,我这个程序就退出了。

我不再理他,又去找同一目录下的game老兄, 他多次进入内存运行,见多识广。

没想到他愤愤然地说: “我告诉你啊,你要想进入内存执行,必须得通过操作系统来装载,但是操作系统他就是个大骗子!”

“为什么啊?”

“第一,他和CPU阿甘狼狈为奸,营造了一个假象,让我们以为每个程序都可以使用3G的巨大空间,但实际上那只是虚拟的!我们使用的内存实际上少得可怜!”

(码农翻身注: 这是个32位的Linux系统)

“第二,他不是把你这个程序一下子全部装入物理内存,而是把你大卸八块,用他的术语讲,叫做页面(page),然后分页按需装入内存, 注意,他不是连续装入的,有时候先装入这一块,有时候先装入那一块, 最后你都不知道自己身体的各个部位在内存的什么地方,绝对是痛不欲生。 ”

“第三,你以为在运行时独占CPU,别做梦了, 操作系统通过分配时间片的方式,让我们这些程序,不,准确的来讲是进程来轮转执行,再加上一点进程调度的算法, 时不时地把你踢出CPU。 由于各个进程切换得非常快,给人类形成了一个假象,好像各个程序在同时执行一样。你说他是不是个大骗子? ”

game老兄说得义愤填膺, 我将信将疑,还是耐心蛰伏吧,等待运行的那一天。

2装载

伟大的一天终于来临了。

主人在命令行窗口敲入了 calculator, 正在睡大觉的我立刻被装载器(loader)唤醒, 他说他是操作系统派来的, 要帮我到内存去执行。

我满心欢喜,等待装载器把我装入内存, 可是等了半天,什么也没有发生, 我不由得问他: 哥们, 难道不是让我进入内存运行吗?

装载器说: “急什么, 看你那没见过世面的样子, 不知道我正在为你创建虚拟地址空间吗? ”

果然如此 ! 要给我建立一个虚拟的空间了 ,好吧,既来之则安之。

“你是不是忙着把我的代码和数据都复制到这个虚拟地址空间中来啊?” 我故意问道。

“真够无知的, 这是虚拟地址空间,不是实际内存, 怎么可能放代码和数据?”这个装载器脾气很大。

我以为这个装载器至少会把我的代码装载到物理内存, 然后在虚拟内存和物理内存直接建立映射。于是耐心等待。

但是这个装载器却并没有这么做, 实际上他除了读取我的一些Header信息之外,根本没有把我的数据Copy到物理内存去, 他到底要做什么?

我质问道: “你不把我的代码装载到物理内存中,我怎么运行? ”

他说: “放心吧,我已经用一个数据结构(页表)把你的代码/数据在硬盘的位置已经记录下来了,等到真正运行的时候会被装载的。”

说着他甩给我一张图: “看到了页表了吗, 绿色的表示已经装入内存, 黄色的表示还在磁盘上, 初始状态下,全是黄色的, 就像你一样。”

(注:为了简化, 此图没有反映段页结合的情况)

这个大脾气的装载器把活干完了 , 大大咧咧地从我的代码中找到了程序的入口点地址 (假设是0x080480c0), 他说等到进程执行的时候就从这里开始,读取第一条指令。

3运行

我意识到自己虽然还躺在硬盘里, 但是操作系统老大已经为我建立了一个进程了, 这个进程有一套自己的虚拟地址,页表等“高级”的数据结构, 已经准备好运行了。

果然, 不久以后, 操作系统调度了这个进程来运行,就从装载器返回的程序入口点0x080480c0开始。

老大命名CPU阿甘去0x080480c0处取出指令来执行, 但这是一个虚拟地址,必须转化成物理地址才行。

于是阿甘就去查看页表,试图把它变成物理内存的地址, 可是这个页表指向的是硬盘中的地址, 阿甘立刻报告: “老大,这是个新家伙,它的代码还在硬盘上呢!”

“好的,马上启动缺页处理程序! ” 看来老大已经司空见惯了。

缺页处理程序开始执行, 根据页表中的地址又在硬盘中找到了我, 我配合着让他把代码取走。

人生的第一次, 我的代码终于被读入了内存当中,当然,阿甘也得把页表给修改一下,这样才能反映已经数据已经进入内存了:

现在可以读取虚拟地址0x080480c0处的内容了, 通过页表的翻译,定位到了物理内存的地址,取出了指令,终于可以执行了 !

随着指令的执行,越来越多的数据和代码被装载到物理内存,果然如game老兄所言,我被大卸八块安插到物理内存的不同位置去了。

但是game老兄说的也不对,那其实并不是我,只是我的一个化身而已。这个化身是一个正在运行的进程,CPU阿甘不停地读数据、写数据。 时间片到了,就把这个进程给挂起,过一会儿再运行。

最后,进程结束,内存中的数据会被清理、覆盖,但是我还是我,玩好无损地躺在硬盘上。

经历了这一次的运行,我算是明白了,操作系统确实是个大骗子,但是他其实也很不容易,资源很有限, 内存就那么大,CPU阿甘只有一个,程序又那么多, 为了让更多的程序运行,更有效地利用内存和CPU, 也只能施展一点骗术了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10412

    浏览量

    206465
  • 操作系统
    +关注

    关注

    37

    文章

    6266

    浏览量

    121841
  • helloworld
    +关注

    关注

    0

    文章

    13

    浏览量

    4326

原文标题:操作系统是个大骗子?

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    实时操作系统和分时操作系统的区别

    操作系统能否满足实时性要求来区分,可把操作系统分成分时操作系统和实时操作系统,分时操作系统按照相等的时间片调度进程轮流运行,分时操作系统
    发表于 11-14 17:39 1.2w次阅读

    设计者更喜欢什么操作系统

    设计)第一线,这个话题就对很重要了。在操作系统领域,有三种系统是应用的比较多的:Windows系统、Mac OS X系统以及各种Linux
    发表于 05-03 11:48

    什么是QNX操作系统

    (API)给操作系统的服务程序,例如读写文件.POSIX.1 已经国际标准化组织(ISO)所接受,命名为ISO/IEC 9945-1:1990 标准。POSIX 现在已经发展成为一个非常庞大的标准族,某些部分正处在开发过程中
    发表于 06-07 14:16

    逃离windows操作系统应当是准备一些什么

    有些喜欢个性的windows使用者在长期的使用windows的时候难免是会感到十分的乏味,可能是一个技术的高手,讨厌了使用windows操作系统,所以说就希望是投身到别的操作系统
    发表于 02-23 10:25

    Android 操作系统必须了解的知识

    【深圳发烧友】Android 操作系统必须了解的知识 Android 操作系统介绍Android是Google于2007年11月05日宣布的基于Linux平台的开源手机操作系统的名称
    发表于 09-09 16:45

    操作系统调用时,操作系统会做什么?

    1.当操作系统调用时,操作系统会做什么?2.如果我想通过FIFO把数据传输到外围设备,如果操作系统将参加?哪个例子介绍这个函数? 以上来自于百度翻译 以下为原文1.when the
    发表于 06-03 11:03

    操作系统的重要性如何?

    文末领取大图。这不是一篇教你如何创建一个操作系统的文章,相反,这是一篇指导性文章,教你从几个方面来理解操作系统。首先需要知道为什么要看这篇文章以及为什么要学习
    发表于 07-23 08:26

    关于汽车操作系统的前世今生看完就懂了

    关于汽车操作系统的前世今生看完就懂了
    发表于 09-26 06:40

    操作系统 ppt

    操作系统课件为PPT电子教案,内容如下: 操作系统的基本概念操作系统的发展操作系统的主要特征操作系统的主要功能进程管理
    发表于 11-07 08:44 0次下载
    <b class='flag-5'>操作系统</b> ppt

    Linux操作系统原理及应用

    Linux操作系统原理及应用 1.1  操作系统的地位 1.2  操作系统的功能 1.3  操作系统的发展过程 1.4 
    发表于 04-28 14:53 0次下载

    操作系统(OS),什么是操作系统(OS)

    操作系统(OS),什么是操作系统(OS) 操作系统(Operating System,简称 OS)的出现、使用和发展是近四十余年来计算机软件的一个重大进展。
    发表于 03-26 15:21 2605次阅读

    RTOS操作系统

    RTOS操作系统RTOS操作系统RTOS操作系统RTOS操作系统RTOS操作系统
    发表于 12-28 15:30 0次下载

    基于网络欺骗操作系统抗识别模型NDAF

    针对传统主机操作系统抗识别技术整体防御能力不足的问题,提出一种基于网络欺骗操作系统抗识别模型( NDAF)。首先,介绍模型的基本工作原理,由网络内的欺骗服务器制定
    发表于 12-21 10:17 0次下载
    基于网络<b class='flag-5'>欺骗</b>的<b class='flag-5'>操作系统</b>抗识别模型NDAF

    鸿蒙与中兴新支点操作系统是否有冲突

    鸿蒙来了,中兴新支点操作系统了吗
    的头像 发表于 08-16 09:30 3388次阅读

    聊聊操作系统

    说到操作系统,大家都不会陌生。我们天天都在接触操作系统——用台式机或笔记本电脑,使用的是windows和macOS系统;用手机、平板电脑,则是android(安卓)和iOS系统
    的头像 发表于 05-12 11:13 1016次阅读
    聊聊<b class='flag-5'>操作系统</b>