【Linux操作系统分析】计算机是怎样工作的

实验一 计算机是怎样工作的

周肃  SA******189

一 实验目的

通过对示例程序进行分析,熟悉gcc工具,理解计算机是怎样工作的,并且讨论分析多任务计算机是怎样工作的。


二 实验内容

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

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


三 实验步骤

example.c:

#include<stdio.h>


int g(int x)
{
	return x+3;
}

int f(int x)
{
	return g(x);
}

int main(void)
{
	return f(8)+1;
}

一般情况下,c程序的编译过程为
1. 预处理
2. 编译成汇编代码
3. 汇编成目标代码
4. 链接



1 预处理,生成.cpp文件

预处理:使用-E 参数
输出文件的后缀为“.cpp”
gcc -E -o gcctest.cpp gcctest.c



2 编译成汇编代码,生成.s文件

预处理文件——>汇编代码
1. 使用-x参数说明根据指定的步骤进行工作,cpp-output指明从预处理得到的文件开始编译
2. 使用-S说明生成汇编代码后停止工作
     gcc -x cpp-output -S -o gcctest.s gcctest.cpp
     也可以直接编译到汇编代码
     gcc -S gcctest.c



3 编译成目标代码,生成.o文件

汇编代码!目标代码        gcc -x assembler -c gcctest.s
直接编译成目标代码      gcc -c gcctest.c
使用汇编器生成目标代码      as -o gcctest.o gcctest.s


4 编译生成可执行文件

目标代码!执行代码           gcc -o gcctest gcctest.o
直接生成执行代码            gcc -o gcctest gcctest.c


5 分析.s汇编代码在CPU上的执行过程

查看汇编代码:


main函数中:                                                                                                                                                                                                       




转到f函数:                                                                                                                                                                                                             




转到g函数:                                                                                                                                                                                                      



转到f函数中,再转到main函数中,最后栈空,程序执行完毕。                                                                                             


四 实验分析

1 计算机是怎样工作的?[单任务]

        加载:计算机将可执行文件(指令和数据的集合)加载到内存中的代码段(code segment)和数据段(data segment),并初始化CPU中的各个寄存器。
        取指:计算机为每个进程分配一个栈空间,栈是程序运行时必须的一个记录调用路径和参数的空间。其中ebp指向当前函数的栈底,esp指向当前函数的栈顶,cs:eip指向当前要执行的指令。
                   eip从代码段取出一条指令后自动+1指向下一条待执行的指令。
        执行:当前指令在CPU中进行译码,以确定各个寄存器的动作。执行完毕后,取出下一条指令进行译码执行。
如此循环下去。

2 计算机是怎样工作的?[多任务]


计算机处理多任务主要通过中断来实现。
以分时系统为例:
        当当前时间片结束,实时时钟向中断控制器发出响应,CPU保存当前各个寄存器的状态(即保存现场)至当前进程独有的内核堆栈中;
        然后从等待进程队列中选择优先度最高的进程,恢复该进程的各个寄存器状态,进行处理,当时间片走完,同样保存现场;
        如此反复。

posted @ 2013-05-15 22:06  suzhou  阅读(274)  评论(1编辑  收藏  举报