当双击某程序到它显示运行界面时,操作系统都做了啥?

简介: 假设:我们现在想要让操作系统运行「微信」,那么首先我们会怎么做嘞?在整个过程中,操作系统又做了啥?如果这是一个面试题,你会怎么回答呢?来看看阿粉的解释~

假设:我们现在想要让操作系统运行「微信」,那么首先我们会怎么做嘞?在整个过程中,操作系统又做了啥?

如果这是一个面试题,你会怎么回答呢?来看看阿粉的解释~

1 ,双击微信图标。

但是打开一个程序的方式不止一种,不要限制了自己,比如也可以通过命令行键入命令的方式将它打开(不过一般不会这么做吧;

当我们双击了微信图标时,就告诉了操作系统,我希望你能帮我运行「微信」

2 ,此时操作系统接收到请求之后,就去磁盘上找到「微信」程序的相关信息,检测它的类型是不是可执行文件,同时通过程序首部信息确定代码和数据在可执行文件中的位置并且计算出对应的磁盘块地址。

看完上面的解释,你有没有疑问呢?操作系统怎么检测它是不是可执行文件呢?对于 Windows 系统来说,可执行文件是 PE(Portable Executable),对于 Linux 系统来说,可执行文件是 ELF(Executable and Linkable Format),对于 Mac 系统来说,可执行文件是Mach-O(Mach Object)

所以操作系统检测的时候,就看一下是否符合文件规范就能确定了

3 ,操作系统做完第 2 步之后,就会创建一个进程,并且将「微信」的可执行文件映射到该进程结构,意思就是,这个进程负责执行「微信」程序。

4 ,接下来操作系统会为「微信」程序设置 CPU 上下文环境,此时我们假设这个调度程序选中了「微信」程序,那么操作系统就会跳到程序开始处

5 ,接下来执行「微信」程序的第一条指令。但是它会发生缺页异常。

为什么会发生缺页异常? 因为程序在执行时,要将代码和数据读入内存, CPU 才能执行,但此时因为内存中还没有相关数据,进而触发了硬件机制,捕获到缺页异常,将控制权交给操作系统

6 ,操作系统此时会分配一页物理内存,同时将代码从磁盘读入内存,然后继续执行「微信」程序。如果程序很大,一页内存不够的话,会在执行过程中重复 5,6 步骤,直至将程序全部读入内存为止

7 ,之后,「微信」程序执行相关函数(系统调用),在显示器上显示「微信」图标

8 ,操作系统接收到这个请求,然后找到显示设备,通常显示设备是由一个进程控制的,所以操作系统将要显示的「微信」图标给该进程

9 ,控制设备的进程告诉设备的窗口系统它要显示「微信」图标,窗口系统在确定这是一个合法的操作之后,会将「微信」图标转换成像素,将像素写入设备的存储映像区

10 ,视频硬件将像素转换成显示器可以接收的一组控制数据信号

11 ,显示器解释数据信号,激发液晶屏 此时,我们就能够在屏幕上看到「微信」的登录界面。

至此,当我们双击某个程序,到显示运行界面时,操作系统做的工作就比较清楚了。

如果真的有面试管问你的话,你也能和面试官扯皮了

以上,非常感谢您的阅读哇

周末愉快~

相关文章
|
10天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
26 0
|
10天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
21 0
|
7月前
|
Java Linux Windows
在Windows操作系统上运行Java程序
在Windows操作系统上运行Java程序
74 2
|
1月前
|
Go 调度
|
5月前
|
Web App开发 缓存 安全
让你的win10/win11系统变得不再卡顿,优雅草伊凡整理-长期更新-如何让windows操作系统不用老是重装依然保持流畅运行
如题:让你的win10/win11系统变得不再卡顿,优雅草伊凡整理-长期更新-如何让windows操作系统不用老是重装在不断的更新中依然保持流畅运行 本文长期更新,本次更新2023年11月8日! 很多时候 我们的win10win11系统不管再怎么关闭更新,都会莫名又被打开,莫名的关机和自动更新,总是在你不注意的时候就更新,因此大家也明白微软的厉害了,扯远了,但是频繁的更新会让系统特别卡,传统办法就是重装系统,因而还衍生了很多一件重装工具,但是每一次重装的代价都是巨大的我相信每个同学都明白。
|
5月前
|
存储 缓存 Linux
【看表情包学Linux】冯诺依曼架构 | 理解操作系统 | 基于 Pintos 实现新的用户级程序的系统调用
【看表情包学Linux】冯诺依曼架构 | 理解操作系统 | 基于 Pintos 实现新的用户级程序的系统调用
65 1
|
5月前
|
存储
【OS Pintos】用户程序是如何工作的 | Pintos 运行原理 | 虚拟内存 | 页函数 | 系统调用
【OS Pintos】用户程序是如何工作的 | Pintos 运行原理 | 虚拟内存 | 页函数 | 系统调用
160 0
|
5月前
|
测试技术 KVM 开发工具
【OS Pintos】Pintos 内核库基本数据结构 | 运行测试用例 alarm-multiple
【OS Pintos】Pintos 内核库基本数据结构 | 运行测试用例 alarm-multiple
73 0
|
2月前
|
Shell Linux 开发工具
操作系统(Linux)外壳程序shell 、用户、权限
操作系统(Linux)外壳程序shell 、用户、权限
|
8月前
|
测试技术 虚拟化
在同一物理服务器上同时运行多个独立的操作系统实例
在同一物理服务器上同时运行多个独立的操作系统实例
233 1