首页 > 编程知识 正文

常用系统类的使用实验报告(大一windows实验结果与分析)

时间:2023-05-04 07:21:08 阅读:77194 作者:4579

操作系统的首次实验

操作系统初

大学:计算机与信息技术

专家:信息安全(保密技术) )。

类:安全1601

名字:深情的前辈

学号: 16281194

2019年3月5日

一、(系统调用实验)了解系统调用的不同封装形式。

1、请参照以下URL步骤。 请参阅使用API接口函数getpid ()直接调用和程序集中断调用两种方法运行分别调用Linux上相同系统调用getpid的程序。 (请告诉我getpid的系统呼叫号码。 linux系统调用的中断矢量号码是多少? 请参阅。

通过查询syscall_32.tbl表,可以看到getpid系统调用的中断号为20。 系统调用是内核空间内函数的执行,但出于提高系统安全性、提高用户程序可移植性等目的,用户程序不能直接调用或修改内核空间内的函数。 此时,使用系统调用,它是连接用户空间和内核空间的纽带,内核内函数的具体实现与系统调用函数的对应关系通过syscall_32.tbl表记录。

2、机上完成习题1.13。

Linux调用c函数格式

汇编格式

此代码无法在64位系统上直接编译。 必须添加“-m32”才能编译32位程序。 但是,直接输入时会显示错误,需要安装匹配库“sudo apt-getinstallgcc-multilibgmultilib module-assistant”。

3、阅读pintos源代码,绘制系统调用实现的流程图。

()同时实验)根据以下代码进行以下实验。

要求:

1、编译并运行该程序(cpu.c ),观察输出结果,说明程序的功能。

(编译命令: gcc -o cpu cpu.c -Wall ) ) )执行命令:/cpu () ) ) ) ) ) )。

2、再次按以下运行,观察结果。 执行命令。/cpu A;/cpu B;/cpu C;/cpu D程序cpu运行了多少次? 他们运行的顺序有什么特征和规律? 请结合操作系统的特点进行说明。

1 #包含stdio.h

2 #include stdlib.h

3 #include sys/time.h

4 #include assert.h

5 # include (公共. h )

6

7 int

(8主(int argc,char *argv[] ) ) ) ) ) ) ) ) ) ) ) )。

9 {

10if(argc!=2) {

11fprintf(stderr,“usage: cpu n”

12退出(1;

13 }

14 char *str=argv[1];

15while(1) {

16spin(1;

17printf(%s(n ),str );

18 }

19 eturn 0;

20

以上实验表明,cpu在一个周期内运行4次,由于不可测原理,无法准确确认时间开销,但可以粗略计算吞吐量。

输出顺序与系统调度有关,如果是单一的道路或轮换,其输出一定是顺序,但由于当前的系统调度很复杂,如果是随机调度,则输出顺序不一定。

三、(内存分配实验)根据以下代码完成实验。

要求:

1、阅读并编译运行该程序(mem.c ),观察输出结果,说明程序的功能。 (命令: gcc -o mem mem.c -Wall )

2、再次执行以下命令,观察结果。 分配给两个分别运行的程序的内存地址是否相同? 是否共享相同的物理内存空间? 为什么? 命令:/mem;/mem

1 #包含unistd.h

2 #include stdio.h

3 #include stdlib.h

4 # include (公共. h )

5

6 int

7main(intargc,char *argv[] ) ) ) ) ) ) ) ) ) 652

8 {

9int*p=malloc(sizeof(int ); //a1

10资产(p!=NULL;

11printf () (%d )地址为pointed to by p : % pn ),

12 getpid (,p ); //a2

13 *p=0; //a3

14while(1) {

15spin(1;

16 *p=*p 1;

17printf () (%d ) p:%d(n ),getpid ),*p ); //a4

18 }

19返回0;

经过上述实验,两个程序所分配的存储器地址不同,但如果关闭地址随机化,则所分配的地址相同。 但具体物理地址不能完全确定,其中有对应关系。 随机的,可能不是物理连续的。

四、(共享问题)根据以下代码完成实验。

要求:

1、阅读并编译运行该程序,观察输出结果,说明程序的功能。 (编译指令: gcc-o thread thread.c-wall-pthread ) (执行指令1:/thread 1000 ) )

2、试运行其他输入参数,总结运行结果的哪些规律? 我可以试着说明一下那个吗? 例如,执行命令2:/thread 100000 ) (或其他参数。 )

3、提示:哪些变量由各个线程共享,线程同时运行时访问共享变量会不会出现意想不到的问题?

1 #包含stdio.h

2 #include stdlib.h

3 #包含“common.h”

4

5电压输入计数器=0;

6 int loops;

7

8 Void *工作器(Void * Arg ) {

9 int i;

10for(I=0; i loops; I ) {

11柜台;

12 }

13返回空值;

14 }

15

16英寸

17主(int argc,char *argv[] ) ) ) ) ) ) ) ) ) ) )。

18 {

19if(argc!=2) {

20fprintf(stderr," usage: threads n "

21退出(1;

22 }

23loops=atoi(argv[1];

24 pthread_t p1,p2;

25 printf (“initial value : % dn”,counter );

26

27pthread_create(P1,NULL,worker,NULL );

28pthread_create(P2,NULL,worker,NULL );

29pthread_join(P1,NULL );

30pthread_join(P2,NULL );

31printf(「finalvalue:%dn”,counter );

32返回0;

33

修改每个参数后,得到的数值与两倍不同,理论值应该是输入值的两倍,但由于碰撞,数值将小于两倍。

实验代码地址

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。