OS-Linux系统实验一: 操作系统初步

(注意:本次所有实验都在Linux中完成)

一、(系统调用实验)了解系统调用不同的封装形式。
要求:1、参考下列网址中的程序。阅读分别运行用API接口函数getpid()直接调用和汇编中断调用两种方式调用Linux操作系统的同一个系统调用getpid的程序(请问getpid的系统调用号是多少?linux系统调用的中断向量号是多少?)。2、上机完成命令:printf(“Hello World!\n”)可归入一个 {C标准函数、GNU C 函数库、Linux API}中哪一个或者哪几个?请分别用相应的linux系统调用的C函数形式和汇编代码两种形式来实现上述命令。3、阅读pintos操作系统源代码,画出系统调用实现的流程图。http://hgdcg14.blog.163.com/blog/static/23325005920152257504165/

二、(并发实验)根据以下代码完成下面的实验。
要求:
1、编译运行该程序(cpu.c),观察输出结果,说明程序功能。
(编译命令: gcc -o cpu cpu.c –Wall)(执行命令:./cpu)
2、再次按下面的运行并观察结果:执行命令:./cpu A & ; ./cpu B & ; ./cpu C & ; ./cpu D &程序cpu运行了几次?他们运行的顺序有何特点和规律?请结合操作系统的特征进行解释。

三、(内存分配实验)根据以下代码完成实验。
要求:
1、阅读并编译运行该程序(mem.c),观察输出结果,说明程序功能。(命令: gcc -o mem mem.c –Wall)
2、再次按下面的命令运行并观察结果。两个分别运行的程序分配的内存地址是否相同?是否共享同一块物理内存区域?为什么?命令:./mem &; ./mem &

四、(共享的问题)根据以下代码完成实验。
要求:
1、阅读并编译运行该程序,观察输出结果,说明程序功能。(编译命令:gcc -o thread thread.c -Wall –pthread)(执行命令1:./thread 1000)
2、尝试其他输入参数并执行,并总结执行结果的有何规律?你能尝试解释它吗?(例如执行命令2:./thread 100000)(或者其他参数。)
3、提示:哪些变量是各个线程共享的,线程并发执行时访问共享变量会不会导致意想不到的问题。

实验报告如下:

一、(系统调用实验)了解系统调用不同的封装形式。
1、参考下列网址中的程序。阅读分别运行用API接口函数getpid()直接调用和汇编中断调用两种方式调用Linux操作系统的同一个系统调用getpid的程序(请问getpid的系统调用号是多少?linux系统调用的中断向量号是多少?
在这里插入图片描述
用API接口函数getpid()直接调用程序代码

在这里插入图片描述
汇编中断调用程序代码

在这里插入图片描述
终端运行命令及结果

getpid的系统调用号是20;linux系统调用的中断向量号是0X80;

2、上机完成习题1.13

在这里插入图片描述
系统调用的C函数形式输出“Hello World!”程序
在这里插入图片描述

编译运行程序结果

汇编代码形式输出“Hello World!”程序

在这里插入图片描述
编译运行程序结果

在这里插入图片描述
3、阅读pintos操作系统源代码,画出系统调用实现的流程图。
系统调用:
Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。用户可以通过系统调用命令在自己的应用程序中调用它们。系统调用和普通的函数调用区别在于:系统调用由操作系统核心提供,运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态。
在这里插入图片描述
系统调用图

二、(并发实验)根据以下代码完成下面的实验。
1、编译运行该程序(cpu.c),观察输出结果,说明程序功能。
(编译命令: gcc -o cpu cpu.c –Wall)(执行命令:./cpu)
2、再次按下面的运行并观察结果:执行命令:./cpu A & ; ./cpu B & ; ./cpu C & ; ./cpu D &程序cpu运行了几次?他们运行的顺序有何特点和规律?请结合操作系统的特征进行解释。

在这里插入图片描述
程序(cpu.c)代码

在这里插入图片描述
编译并运行程序

程序功能:
(1)当程序参数不为2个时,输出”usage: cpu ”,提示错误;
(2)当程序输入参数符合要求时,一直打印该参数。

执行命令:./cpu A & ; ./cpu B & ; ./cpu C & ; ./cpu D &结果图:

在这里插入图片描述

运行的顺序无规律,特点随机。
解释理由:
(1)四个进程是并发运行的,不是顺序执行的
(2)操作系统是多道批处理系统
(3)此电脑处理器是多核的,可同时执行多个任务

三、(内存分配实验)根据以下代码完成实验。
1、阅读并编译运行该程序(mem.c),观察输出结果,说明程序功能。(命令: gcc -o mem mem.c –Wall)
2、再次按下面的命令运行并观察结果。两个分别运行的程序分配的内存地址是否相同?是否共享同一块物理内存区域?为什么?命令:./mem &; ./mem &

在这里插入图片描述
程序(mem.c)代码

在这里插入图片描述
编译并运行程序及结果

程序功能:
首先申请⼀一个int⼤大⼩小的内存地址,并打印进程号和内存地址。之后就是对该内存地址保存的值进行循环累加操作。
在这里插入图片描述
编译并运行程序及结果

答:
两个进程申请分配的内存地址不⼀样,对于每个进程而言,每个进程该分配的内存空间进行累加操作,互不影响。
每个进程的内存空间只是虚拟内存空间,每次访问内存空间的某个地址,都需要把地址翻译为实际物理内存地址。所有进程共享同⼀物理内存,每个进程只把⾃⼰目前需要的虚拟内存空间映射并存储到物理理内存上。由于每个进程的虚拟地址是独立于其他进程的,通过页表将虚拟地址转换为真实地址,不论两个进程申请的虚拟内存地址是否相同,真实的物理地址是不一样的,所以两个进程对地址上的数值操作都是独立的。

四、(共享的问题)根据以下代码完成实验。
1、阅读并编译运行该程序,观察输出结果,说明程序功能。(编译命令:gcc -o thread thread.c -Wall –pthread)(执行命令1:./thread 1000)
2、尝试其他输入参数并执行,并总结执行结果的有何规律?你能尝试解释它吗?(例如执行命令2:./thread 100000)(或者其他参数。)
3、提示:哪些变量是各个线程共享的,线程并发执行时访问共享变量会不会导致意想不到的问题。

在这里插入图片描述
程序(thread.c)代码

在这里插入图片描述
编译并运行程序及结果

程序功能:
程序创建两个线程,对同一个变量执行累加操作;
程序结果:
为输入参数的两倍;
现象解释:
两个线程在同一个进程中,访问的是共享的变量。而且两个线程之间互不影响,则程序执行参数的2倍的累加操作。

一、 实验目的 1、掌握在虚拟机环境下安装 Linux系统 2、熟练掌握基本 shell命令 3、熟练掌握shel1高级操作 二、 开发工具和运行环境 Vmware15虚拟机,Centos7的iso镜像文件 三、 实验内容 1、在虚拟机环境下安装 CentOS7操作系统 如果有虚拟机环境,可以直接安装,如果没有,需要先行安装虚拟机软 件。 Linux的安装步骤: (1)选择界面安装 (2)语言选择 (3)选择安装信息 (4)选择安装软件 (5)设置磁盘分区方案 (6)手动分区 (7)设置根口令及验证 2、基本 shell命令 1)pwd命令:显示当前所在目录 (2)date命令:显示日期 ()who命令:显示当前正在系统中的所有用户名字,使用终端设备号, 注册时间 ()cal命令:显示某年内指定的日历 (5) uname命令:查看当前操作系统的信息 (6)wc命令:统计文件中的文件行数、字数和字符数 (7) clear命令:清屏 3、在线帮助命令 ()man命令名:显示该命令功能、选项等说明() whatis命令名:只给出简单介绍信息 (3)nfo命令名:另外一种帮助命令 (4)help命令名:显示内置命令( shell) 4、 Shell命令的高级操作 (1) shell的命令补全: 先输入命令的前几个字母,然后按[TAB]键,如果与输入字母匹配的 仅有一个命令名或文件名,系统将自动补全,如果有多个与之匹配,系统 将发出报警声音,如果再按一下[TAB]键,系统将列出所有与之匹配的命 令或文件名。 (2) shel的历史命令: 在提示符下输入 history命令查看所有历史命令若执行以前历史命令 列表中的某一个命令,则执行“!n”,n为历史命令列表中的编号。向上 方向键可以翻出最近使用的命令 (3) shell的重定向 输出重定向符号有“>”和“>>”,输入重定向符为“<”。错误重定向 输出“2>”,把命令行出错的信息保存到指定的文件中去 4)shel1的管道操作: 管道线“”前面的命令的输出是管道线“”后面命令的输入。 命令1命令2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值