HITCS_大作业_程序人生-Hello’s P2P

计算机系统大作业*

                    **摘 要**

hello的生命周期从一个高级c语言程序开始的,然而为了在系统上运行hello.c程序,必须通过预处理、编译、汇编、链接这些过程转化成可执行的目标文件,才能在系统上运行,然后运行并结束。为了深入理解这个具体过程,结合理论知识、运用相关工具对hello的一生的“辗转”、“起伏”进行具体剖析。进而能更好的理解相关过程的实现及原理。

关键词:预处理;汇编;指令;目标文件;进程;信号处理;I/O函数;

(摘要0分,缺失-1分,根据内容精彩称都酌情加分0-1分)

目 录

第1章 概述 - 4 -

1.1 Hello简介 - 4 -

1.2 环境与工具 - 4 -

1.3 中间结果 - 4 -

1.4 本章小结 - 4 -

第2章 预处理 - 5 -

2.1 预处理的概念与作用 - 5 -

2.2在Ubuntu下预处理的命令 - 5 -

2.3 Hello的预处理结果解析 - 5 -

2.4 本章小结 - 6 -

第3章 编译 - 7 -

3.1 编译的概念与作用 - 7 -

3.2 在Ubuntu下编译的命令 - 7 -

3.3 Hello的编译结果解析 - 7 -

3.4 本章小结 - 16 -

第4章 汇编 - 17 -

4.1 汇编的概念与作用 - 17 -

4.2 在Ubuntu下汇编的命令 - 17 -

4.3 可重定位目标elf格式 - 17 -

4.4 Hello.o的结果解析 - 19 -

4.5 本章小结 - 21 -

第5章 链接 - 22 -

5.1 链接的概念与作用 - 22 -

5.2 在Ubuntu下链接的命令 - 22 -

5.3 可执行目标文件hello的格式 - 22 -

5.4 hello的虚拟地址空间 - 25 -

5.5 链接的重定位过程分析 - 26 -

5.6 hello的执行流程 - 28 -

5.7 Hello的动态链接分析 - 29 -

第6章 hello进程管理 - 31 -

6.1 进程的概念与作用 - 31 -

6.2 简述壳Shell-bash的作用与处理流程 - 31 -

6.3 Hello的fork进程创建过程 - 31 -

6.4 Hello的execve过程 - 31 -

6.5 Hello的进程执行 - 33 -

6.6 hello的异常与信号处理 - 33 -

6.7本章小结 - 37 -

第7章 hello的存储管理 - 38 -

7.1 hello的存储器地址空间 - 38 -

7.2 Intel逻辑地址到线性地址的变换-段式管理 - 38
-

7.3 Hello的线性地址到物理地址的变换-页式管理 - 39
-

7.5 三级Cache支持下的物理内存访问 - 43 -

7.6 hello进程fork时的内存映射 - 43 -

7.7 hello进程execve时的内存映射 - 44 -

7.8 缺页故障与缺页中断处理 - 45 -

7.9动态存储分配管理 - 46 -

7.10本章小结 - 47 -

第8章 hello的IO管理 - 48 -

8.1 Linux的IO设备管理方法 - 48 -

8.2 简述Unix IO接口及其函数 - 49 -

8.3 printf的实现分析 - 50 -

8.4 getchar的实现分析 - 52 -

8.5本章小结 - 52 -

结论 - 53 -

附件 - 55 -

参考文献 - 56 -


第1章 概述

1.1 Hello简介

在编辑器中创建并保存文本文件hello.c(Program)。Hello.c文件在经过预处理、编译、汇编、链接后生成了可执行目标文件hello。在向shell输入“./hello”运行hello时shell为其fork了子进程(Process),使得hello从Program变成了Process。

然后shell 通过
execve映射虚拟内存,并且hello中的代码和数据被载入主存。然后CPU开始执行hello程序的main程序中的目标代码。CPU为
hello 分配时间片、执行逻辑控制流。当程序运行结束后,shell 父进程负责回收
hello 进程,内核删除相关数据结构,于是hello“从0到0”结束了。

1.2 环境与工具

环境:VMware Ubuntu

工具:DEVC++、edb、gdb、

1.3 中间结果

中间结果 备注
hello.i 用来分析预处理过程的作用
hello.s 用来分析编译阶段的作用
hello.o 可重定位目标文件
hello.elf 可重定位目标文件ELF文件
hello.asm 可重定位目标文件反汇编
hello.ld 可执行的目标文件
hello.ldelf 可执行的目标文件ELF格式
hello.asm1 可执行的目标文件反汇编

1.4 本章小结

本章主要介绍了完成本项目的操作环境、应用工具,以及产生的中间结果。

(第1章0.5分)


第2章 预处理

2.1 预处理的概念与作用

概念:预处理器(cpp)根据以字符#开头的命令,修改原始的c程序。

主要作用为:

1.文件包含:将源文件中以“include”格式包含的文件复制到编译的源文件中。

2.处理宏定义:用实际值替换用“#define”定义的字符串。

3.处理条件编译:根据“#if”后面的条件决定需要编译的代码。

2.2在Ubuntu下预处理的命令

命令:cpp hello.c > hello.i

在这里插入图片描述

图2.1Ubuntu下生成hello.i文件

2.3 Hello的预处理结果解析

在这里插入图片描述

图2.2 hello.i局部内容

打开hello.i发现在:1)hello.c中对应的注释被去掉了。2)原来hello.c对应的代码之上多出了很多代码,是hello.c中的三个头文件:stdio.h、unistd.h、
stdlib.h的内容。源码中的尖括号表示在包含文件目录中去查找,即到C
编译系统所提供的并存放在指定的子目录下寻找头文件,并将对应内容添加到.i文件。

2.4 本章小结

预处理主要对hello.c进行展开头文件、宏替换、去掉注释、条件编译,完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件hello.i。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。

(第2章0.5分)


第3章 编译

3.1 编译的概念与作用

概念:

编译器将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序,汇编语言程序中的每条语句都以一种标准的文本格式确切的描述一条低级机器语言指令。

过程:

首先进行词法分析、语法分析,然后进行代码优化:删除公共表达式、循环优化、复写传播,以及无用赋值的删除等,并为存储分配空间,最后在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。即:

  1. 词法分析、语法分析

  2. 代码优化、存储分配

  3. 代码生成

3.2 在Ubuntu下编译的命令

命令:gcc -S hello.c -o hello.s

在这里插入图片描述

图3.1Ubuntu下生成hello.s文件

3.3 Hello的编译结果解析

3.3.1数据

在这里插入图片描述

图 3.2 hello.c中包含的数据

可以看到hello.c中的数据包括:1)常量:字符串;2)局部变量:i;
3)全局变量:sleepsecs;4)外部参数:argc、argv。

  1. 常量处理

可以看到:1)字符串常量被处理成了UTF-8格式。2)这两个字符串直接存放在汇编程序中的只读数据域。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: hit_stop_words.txt是一个文本文件,包含一系列常见的停用词,用来在文本处理和自然语言处理中过滤掉无关的常用词汇。停用词是指在文本分析中,没有实际意义且频繁出现的单词,比如连词、代词、介词等。停用词列表可以选择根据不同语言和应用场景进行自定义。 通过使用hit_stop_words.txt,我们可以在文本处理过程中将这些停用词过滤掉,从而提高文本处理的效率和准确性。停用词列表通常被用于机器学习、文本分类、信息检索等许多自然语言处理任务中。 这个文件中的每个停用词都占据一行。在文本处理过程中,我们可以读取hit_stop_words.txt文件,并将其中的词汇存储到一个列表或集合中。在处理文本时,我们可以遍历文本中的每个单词,并将其与停用词列表中的词汇进行对比。如果发现该单词在停用词列表中,我们可以选择将其过滤掉或者忽略不计。 通过使用hit_stop_words.txt,我们能够去除一些常见的无意义词汇,提取出更加关键和有意义的文本信息。这样可以避免这些无关词汇对文本分析和处理的干扰,提高处理结果的精度和效果。 总结而言,hit_stop_words.txt是一个用于存储常见停用词的文本文件,通过使用这个停用词列表,我们能够过滤掉文本中的常见无意义词汇,提高文本处理的精度和效率。 ### 回答2: hit_stop_words.txt是一个文本文件,其中包含一些常见的停用词。停用词是指在自然语言处理中经常被忽略的词汇,因为其对于文本分析任务并没有太多的意义。这些词汇通常是一些最常见的、无实质内容或很少带有特定含义的词语。 停用词在文本处理任务中被忽略是因为它们并不对文本的特征表示或语义理解有太大的贡献。例如,在进行文本分类时,常见的停用词,如“的”、“是”、“了”等,不会提供关于文本类别的任何有用信息,只会增加计算和储存的负担。 hit_stop_words.txt是一个用于过滤这些停用词的文件。这个文件中列举了一系列常见的停用词,包括了各种语言中常见的冠词、代词、连词、介词等无实际意义的词汇。通过将这些停用词与文本进行匹配,我们可以将其去除,从而提高文本处理任务中的效率和准确性。 使用hit_stop_words.txt时,我们可以通过读取该文件的内容,将其中的停用词加载到程序中,并在处理文本之前进行过滤。这样,我们可以排除这些常见的停用词,使得文本的特征表示更加准确和有意义。 ### 回答3: hit_stop_words.txt 是一个文本文件,其中记录了一些常见的停用词。停用词是在文本分析中被排除在外的常见词汇,因为它们往往不包含很多有意义的信息,而且可能对文本分析产生不良影响。 这个文本文件的内容可能包括各种语言的停用词,比如英语、中文等,它们通常是一些常见的词汇,如“的”、“是”、“在”、“了”、“and”、“the”等。这些词汇在文本分析中被认为是噪音,可以被过滤掉以提高文本分析的准确性和效率。 对于要进行文本分析的任务,例如自然语言处理、信息检索或文本挖掘等,我们可以通过读取 hit_stop_words.txt 文件,并将其中的停用词从文本中移除,以避免它们对分析结果的干扰。可以使用编程语言,如Python,读取该文件,并将停用词保存在一个列表中,然后遍历待分析的文本,将其中的停用词过滤掉或进行相应的处理。 通过使用停用词列表进行文本分析,可以减少分析过程中的噪音和冗余信息,提高模型的精确性和效率。同时,根据具体任务的需要,我们也可以根据实际情况自定义停用词列表,以更好地适应特定的分析需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值