计算机系统
大作业
题 目 程序人生-Hello’s P2P
专 业 人工智能(未来技术)
学 号 7203610723
班 级 2036016
学 生 姜钧昊
指 导 教 师 史先俊
计算机科学与技术学院
2022年5月
几乎全世界的程序员都将HelloWorld作为打开未知的编程语言大门的钥匙,当他们笨拙地在代码编辑器中敲出一句或者几句代码,小心翼翼地点击集成开发环境中的运行按钮,喜出望外地看到了控制台中那个稀松平常的字符串,HelloWorld也将渐渐地从他们的视线中消失。可是,当他们不断遇到各种bug和底层问题,慢慢成为更强大的程序员,他们总有一天会意识到——回到起点,HelloWorld程序蕴含着无数计算机系统机制设计者的思想精华。
在编译源文件的过程中,gcc通过调用cpp/cc1/as/ld,将C语言源文件进行预处理、编译、汇编、链接,最终形成可执行目标文件hello,由存储器保存在磁盘中。运行进程时,操作系统为其分配虚拟地址空间,提供异常控制流等强大的工具,Unix I/O为其提供与程序员和系统文件交互的方式。本文通过分析Hello程序从代码编辑器到运行进程的过程,对计算机系统编译源文件、运行进程等机制进行较深入的分析和介绍。
关键词:计算机系统;操作系统;进程加载;C语言底层实现;CSAPP
(摘要0分,缺失-1分,根据内容精彩称都酌情加分0-1分)
目 录
2.2在Ubuntu下预处理的命令............................................................................. - 5 -
5.3 可执行目标文件hello的格式....................................................................... - 8 -
6.2 简述壳Shell-bash的作用与处理流程........................................................ - 10 -
6.3 Hello的fork进程创建过程........................................................................ - 10 -
7.2 Intel逻辑地址到线性地址的变换-段式管理............................................... - 11 -
7.3 Hello的线性地址到物理地址的变换-页式管理.......................................... - 11 -
7.4 TLB与四级页表支持下的VA到PA的变换................................................ - 11 -
7.5 三级Cache支持下的物理内存访问............................................................. - 11 -
7.6 hello进程fork时的内存映射..................................................................... - 11 -
7.7 hello进程execve时的内存映射................................................................. - 11 -
7.8 缺页故障与缺页中断处理.............................................................................. - 11 -
8.2 简述Unix IO接口及其函数.......................................................................... - 13 -
第1章 概述
1.1 Hello简介
根据Hello的自白,利用计算机系统的术语,简述Hello的P2P,020的整个过程。
P2P:将写好的程序保存成源程序Hello.c。通过预处理器(cpp)生成Hello.i文件,再通过编译器(cc1)生成汇编程序(文本)hello.s,经过编译器处理后生成可重定位目标程序(二进制文件)Hello.o,最后hello.o和printf.o在链接器(ld)作用下生成可执行目标程序(二进制)hello,就此诞生Hello。然后通过在bash中运行它,OS为其fork一个进程。
O2O:然后在这个子进程中使用execve指令运行它,使用mmap函数为其创建一个新的虚拟内存区,OS再为这个进程分配时间片,使得Hello可以在X86-64上进行取指、译码、执行。对Hello进行内存映射,开始运行,从物理内存中取出代码与数据,通过IO在屏幕上输出信息,执行完后由bash回收,结束Hello的一生。
1.2 环境与工具
列出你为编写本论文,折腾Hello的整个过程中,使用的软硬件环境,以及开发与调试工具。
X64 CPU;2GHz;2G RAM;256GHD Disk;
Windows10 64位;
Vmware Worksta