【实验一】计算机是怎么工作的

来源:互联网 发布:云骐网络 编辑:程序博客网 时间:2024/04/30 16:40

作者:SA****6450  丁海蛟

一、实验任务:

        使用Example的c代码分别生成.cpp,.s,.o和ELF可执行文件,并加载运行,分析.s汇编代码在CPU上的执行过程。

二、实验要求:

        通过实验解释单任务计算机是怎样工作的,并在此基础上讨论分析多任务计算机是怎样工作的。

三、实验环境:

        vmware9.0   ubuntu10.04

四、实验步骤:

        1、在vmware9.0环境下的虚拟机ubuntu10.04中打开terminal,启动gedit编辑实验代码example.c。如图一所示。


图一

        2、分别使用命令

                –gcc –E –o example.cpp example.c

                –gcc –x cpp-output –S –o example.s example.cpp

                –gcc –x assembler –c example.s -o example.o

                –gcc –o example example.o

           生成.cpp,.s,.o和ELF可执行文件。如图二所示。


图二

        3、使用objdump -S example命令,来查看程序的汇编过程,找到main() 、f()和g()函数段,如图三所示。


图三

五、实验分析

        1、程序从main函数开始执行,首先将%ebp压入栈中,然后重新建立新栈,这个过程就是现场保护。再将8保存到ebp所对应的存储单元中,然后调用函数f(),再次进行现场保护,然后将ebp所对应的存储单元中存储的8保存到寄存器eax中,然后调用函数g()。再次进行现场保护后,进行3+8的计算,然后释放内存,返回到f()函数,执行f()函数中调用语句后面的一句,即leave,释放内存,然后返回到main()函数函数中调用语句后面的一句leave,然后返回,结束。

        2、以上是单任务计算机的执行过程,按任务的要求,一条指令接着一条指令一路执行下去。但是对于多任务的计算机,采用时间轮片机制将时间分成固定的段,每段分配给不同的任务,所以每个任务的执行都不是完全连续的。但由于每段时间很短,不同任务之间切换的非常快,看起来不同任务是同时执行的。因为任务在不断的切换,当一个任务的时间段结束时,需要对该任务的现在状态进行现场保护,即对一些中间结果,下一条指令的地址等进行保存,当再次轮到该任务执行时,将刚刚保存的现场进行恢复,继续上次没有完成的工作。为了更加有效的执行任务,还采用了优先级和中断的机制,将不同的任务配置不同的优先级,对于那些优先执行或者需要紧急执行的任务,分配更高的优先级,当有更高优先级的任务出现时,发出中断,然后响应该中断,执行更加紧急的任务。通过时间轮片的机制,实现了多任务的过程。通过优先级和中断的机制,实现了效率优先,兼顾公平。

原创粉丝点击