操作系统_实验报告1


github库链接https://github.com/jrqricky/Hello-World

一、系统调用实验

要求:
操作系统_实验报告1操作系统_实验报告1

1、参考下列网址中的程序。阅读分别运行用API接口函数getpid()直接调用和汇编中断调用两种方式调用Linux操作系统的同一个系统调用getpid的程序。请问getpid的系统调用号是多少?linux系统调用的中断向量号是多少?
getpid的系统调用号是20;linux系统调用的中断向量号是128。

2、上机完成习题1.13。
操作系统_实验报告1操作系统_实验报告1

3、阅读pintos操作系统源代码,画出系统调用实现的流程图。
操作系统_实验报告1

二、并发实验

要求:
操作系统_实验报告1

1、 编译运行该程序(cpu.c),观察输出结果,说明程序功能。
(编译命令: gcc -o cpu cpu.c –Wall)(执行命令:./cpu)
无限循环每隔1秒输出一次执行参数里的字符。

2、再次按下面的运行并观察结果:执行命令:./cpu A & ; ./cpu B & ; ./cpu C & ; ./cpu D &程序cpu运行了几次?他们运行的顺序有何特点和规律?请结合操作系统的特征进行解释。
程序cpu运行了4次,是交叉运行循环输出的,因为操作系统是分时的,在每个进程暂停的时间片中,下一个进程就绪并占用cpu。

三、内存分配实验

要求:
操作系统_实验报告1

1、 阅读并编译运行该程序(mem.c),观察输出结果,说明程序功能。(命令: gcc -o mem mem.c –Wall)
申请一个int变量作为计数器,输出进程号和内存地址,初始化计数器为0,然后无限循环,每隔1秒使计数器+1并输出进程号和计数器数值。

2、再次按下面的命令运行并观察结果。两个分别运行的程序分配的内存地址是否相同?是否共享同一块物理内存区域?为什么?命令:./mem &; ./mem &
两个程序的内存地址不相同,因为在每个程序中都申请了一次内存。

四、共享的问题

要求:
操作系统_实验报告1

1、 阅读并编译运行该程序,观察输出结果,说明程序功能。(编译命令:gcc -o thread thread.c -Wall –pthread)(执行命令1:./thread 1000)
申请一个初始值为0的volatile变量计数器并输出计数器的值初始,再申请两个线程,每个线程内循环执行参数次,每次循环计数器+1,最后输出计数器的最终值。

2、 尝试其他输入参数并执行,并总结执行结果的有何规律?你能尝试解释它吗?(例如执行命令2:./thread 100000)(或者其他参数)
输出值是执行参数值的两倍,因为每个线程都会使计数器增加执行参数值次。

3、 提示:哪些变量是各个线程共享的,线程并发执行时访问共享变量会不会导致意想不到的问题。
计数器volatile变量是线程共享的,线程并发执行时可能会出现问题,例如一个线程正在修改变量,但还未将修改的值从内存放回物理地址,另一个线程同时修改了物理地址内的值,这个线程再将内存中的值放回物理地址,就会导致丢失是修改的问题。