北大信科计算机系面试时问到了这个问题,没答出来。后来了解才发现这个问题几乎涉及到了操作系统的所有功能
一、双击运行软件,触动了哪些硬件呢
1、 鼠标和键盘
2、屏幕
无论是显示器还是显卡,这里都有个“坐标”的概念,也就是说,什么图像在哪个坐标,都是定义好了才画上去的。本来在某个坐标画了一个鼠标箭头,当接到鼠标移动的事件之后,你应该按相同的方向,按照一定的比例(鼠标灵敏度),在屏幕的某个坐标再画一个鼠标箭头。
3、输入设备驱动
有时候新插上一个鼠标的时候,会弹出一个通知你安装驱动,对于操作系统来讲,输入设备会发送一个中断。
4、输出设备驱动
显卡会有显卡驱动,在操作系统中称为输出设备驱动
二、从点击程序,窥探OS全貌
“在桌面上点击QQ图标”
(一)、首先,鼠标双击会触发一个中断。
在操作系统里面就是调用中断处理函数。操作系统发现双击的是一个图标,就明白了用户的原始诉求,准备运行QQ和别人聊天。
(二)、运行QQ。
因为将来的一段时间,用户要一直和QQ进行交互。这一块包含以下部分
1、文件管理系统【程序应该怎么做,做什么】
对QQ这个程序来说,它能做哪些事情,每个事情怎么做,先做啥后做啥,都已经作为程序逻辑写在程序里面,并且编译成为二进制了。
电脑上的程序有很多,它们都以二进制文件的形式保存在硬盘上。硬盘是个物理设备,要按照规定格式化成为文件系统,才能存放这些程序。文件系统需要一个系统进行统一管理,称为文件管理子系统(File Management Subsystem)。
2、进程与程序
当操作系统拿到QQ的二进制执行文件的时候,就可以运行这个文件了。
QQ的二进制文件是静态的,称为程序(Program),
运行起来的QQ,是不断进行的,称为进程(Process)。
3、系统调用
任何一个程序要想运行起来,就需要调用系统调用,创建进程。
4、进程管理系统
在操作系统中,进程的执行也需要分配CPU进行执行,也就是按照程序里面的二进制代码一行一行地执行。
于是,为了管理进程,我们还需要一个进程管理子系统(Process Management Subsystem)。如果运行的进程很多,则一个CPU会并发运行多个进程,也就需要CPU的调度能力了。
5、 内存管理系统
在操作系统中,不同的进程有不同的内存空间,但是整个电脑内存就这么点儿,所以需要统一的管理和分配,这就需要内存管理子系统(Memory Management Subsystem)。
如果想直观地了解QQ如何使用CPU和内存,可以打开任务管理器,你就能看到QQ这个进程耗费的CPU和内存。
QQ启动之后,有一部分代码会在显示器上画一个对话框,并且将键盘的焦点放在了输入框里面。CPU根据这些指令,就会告知显卡驱动程序,将这个对话框画出来。
于是使用QQ的用户就会很开心地发现,他能和别人开始聊天了。
6、当用户通过键盘噼里啪啦打字的时候,键盘也是输入设备,也会触发中断,通知相应的输入设备驱动程序。
对于QQ来讲,由于键盘闪啊闪的焦点在QQ这个对话框上,因而操作系统知道,这个事件是给这个进程的。QQ的代码里面肯定有遇到这种事件如何处理的代码,就会执行。一般是记录下客户的输入,并且告知显卡驱动程序,在那个地方画一个“a”。显卡画完了,客户看到了,就觉得自己的输入成功了。
当用户输入完毕之后,回车一下,还是会通过键盘驱动程序告诉操作系统,操作系统还是会找到QQ,QQ会将用户的输入发送到网络上。QQ进程是不能直接发送网络包的,需要调用系统调用,内核使用网卡驱动程序进行发送。