操作系统第2次实验报告:创建进程

1.编写程序

        1.1利用vim文本编辑器编写一个fork.c的程序

操作系统第2次实验报告:创建进程_第1张图片

       1.2 编写完成,保存退出:wq,执行 gcc -o fork.c fork 命令若无错误提示,即为编译成功。

       

 

2.打印进程树

 

     2.1(1) 执行./fork & 可将进程挂起,并显示父进程进程号

          (2)执行./fork 显示子进程和父进程进程号

           操作系统第2次实验报告:创建进程_第2张图片

 

 

 

 

 

     2.2  执行 pstree -p 21671 打印进程树

         

 

 

 

3.解读进程相关信息

3.1 ps -ef

 

 

 

 各字段的定义及值释义(以第一行为例):

 

  • UID:进程所属用户,huangbiting是用户ID;
  • PID:进程号,28523是28524(子进程),28525(子进程)父进程ID;;
  • PPID:父进程号,20141是20383的父进程ID;
  • C:占用的CPU使用率;
  • STIME:进程运行的时间,进程0时0分0秒执行完成;
  • TTY:终端的次要装置号码;pts/0为虚拟终端号,打开一个终端,这个终端就是pts/1,再打开一个,就是pts/2
  • TIME:执行的时间;
  • CMD:进程所执行的指令;一行的指令为./firsttest

 

 

(2) ps -aux

使用ps -aux给出所创建进程的信息,根据进程号找到这次实验创建的进程。

 

 

 

分析字段:

USER:用户名。

PID:进程的ID 。

%CPU:进程占用的CPU百分比。

%MEM:占用内存的百分比 。 

VSZ :该进程使用的虚拟內存量(KB)。

RSS :该进程占用的固定內存量(KB)(驻留中页的数量)。

STAT:进程的状态。(S:处于休眠状态,+:位于后台的进程组)

START:该进程被触发启动时间 。

 

 

 4.疑惑及解答:

4.1在终端次要装置号码为什么是pts/0

     查询发现,他就是一个终端号码,与开的终端数量有关

     https://blog.csdn.net/weixin_34072857/article/details/86259660

4.2 sleep()函数在C语言中的意义?

     在反复几次利用ps -ef给出所创建进程的信息是时,都只有一条进程信息,通过询问了同学,得到修改sleep()函数值的方法,

去查阅资料后,明白这的功能是执行挂起一段时间,意味值这数值越小,执行挂起时间越短,以至于可能在执行ps -ef后,来不及查询,部分进程已经结束挂起。

用法:usigned sleep(unsigned seconds),注意,如果使用的头文件是#include,则Sleep(1000)表示休息1秒,当然,此次实验是在linux平台下进行的

使用的头文件是#include,sleep(1)表示休息1秒。

5.分析可执行文件构成

5.1、编写简单程序mytest.c,使用:%!xxd:%!xxd -r 实现与十六进制文本的切换

——mytest.c文件及其十六进制表示

操作系统第2次实验报告:创建进程_第3张图片

操作系统第2次实验报告:创建进程_第4张图片

——mytest(可执行文件及其十六进制表示)

操作系统第2次实验报告:创建进程_第5张图片

 

 

 操作系统第2次实验报告:创建进程_第6张图片

 

使用objdump -h mytest 命令打印各个字段及的基本信息。

操作系统第2次实验报告:创建进程_第7张图片

操作系统第2次实验报告:创建进程_第8张图片

 

 

 分析Linux可执行文件构成:

 

 

 exec header(执行头部,也可理解为文件头部)

text segment(文本段)

data segment(数据段)

text relocations(文本重定位段)

data relocations(数据重定位段)

symbol table(符号表)

tring table(字符串表)

在分析可执行文件结构时 ,先分析可执行文件的生成:源代码->静态库文件->可执行文件

以mytest.c为例

(1)先经过预处器(cpp)处理为.i文件
gcc -E mytest.c -o mytest.i
再编译为汇编文件
gcc -S mytest.i -o mytest.s
再汇编为二进制的.o文件
gcc -c mytest.s -o mytest.o

(2)编译器(ccl)再处理为.a文件
.a文件实质上就是.o文件打了个包。一般把它叫做静态库文件。它在使用的时候,效果和使用.o文件是一样的。

(3)最后为.so文件
一个ELF格式的文件,也就是linux的可执行文件。

 

你可能感兴趣的:(操作系统第2次实验报告:创建进程)