zoukankan      html  css  js  c++  java
  • 【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保存当前各个寄存器的状态(即保存现场)至当前进程独有的内核堆栈中;
            然后从等待进程队列中选择优先度最高的进程,恢复该进程的各个寄存器状态,进行处理,当时间片走完,同样保存现场;
            如此反复。

  • 相关阅读:
    一个合格的程序员应该读过哪些书
    一个程序员如何快速赚到一百万?
    如何创造财富?硅谷创业之父 Paul Graham 《黑客与画家》思维导图
    java 入门书籍(java7)
    活动预售和预热的目的
    活动策划
    店铺费率把控
    如何通过店铺数据分析店铺异常原因?
    刷单三大目的?如何安全、低成本、高效完成刷单
    活动报名技巧之——天天特卖
  • 原文地址:https://www.cnblogs.com/suzhou/p/3639011.html
Copyright © 2011-2022 走看看