当前位置:文档之家› 计算机操作系统实验报告

计算机操作系统实验报告


3.设置断点: (gdb)break 7 4.开始执行: (gdb) run
5.程序继续执行直到结束: 6.退出 gdb: (gdb)quit 实 验Leabharlann 原 理 步 骤 ( 算 法 流 程 )
(gdb)continue
译时使用调试参数
启动 gdb
实 验 结 果 及 分 析
设置断点
开始执行
.程序继续执行直到结束
具体题目 实验一 操作系统实验环境熟悉(Linux 操作命令、Linux/Windows 平台编程工具) 系统平台 Linux/Windows 平台编程工具
Linux 基本操作介绍: (1)Linux 系统基本操作(启动与退出、文件和目录操作、文档备份与压缩、联机帮 助等) pwd 命令:此命令显示出当前工作目录的绝对路径,cd 命令:改变工作目录。mkdir 命令:创建一个目录。rmdir 命令:删除空目录。cat 命令:将文件的内容打印输出到 显示器或终端窗口上。cp 命令:将给出的文件或目录拷贝到另一文件或目录中。mv 命 实 验 原 理 步 骤 ( 算 法 流 程 ) 令:为文件或目录改名或将文件由一个目录移入另一个目录中。rm 命令:删除一个目 录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删 除。ls 命令:列出目录的内容。chmod 命令:用于改变文件或目录的访问权限。sort 命令:对文件中的各行进行排序。gzip 命令:对文件进行压缩。unzip 命令:用于解 扩展名为.zip 的压缩文件。tar 命令:为某一特定文件创建档案(备份文件) ,也可以 在档案中改变文件,或者向档案中加入新的文件。 (2)gcc 的使用:gcc 是 linux 系统的 C 编译器,将 C/C++源程序和目标程序编译并调 用链接程序 ld 生成可执行文件。 例如:gcc –o hello hello.c #生成可执行文件 hello g++命令的使用:完成 C++程序的编译和链接,可以自动的完成目标代码与 C++库的链 接并生成可执行程序。 例如:g++ hello.C #hello.C 是一个 C++文件,生成可执行程序 a.out
3)gdb 命令的使用:gdb 是 linux 系统的调试工具,是用来调试 C 或 C++程序的功能强 大的调试器,它使用户能在程序运行的时候观察程序的内部结构和内存的使用情况, 它提供了一些功能: (1)监视或修改程序中变量的值; (2)设置断点,使程序指定的 代码行上暂停执行; (3)单步执行或程序跟踪。 例如: 1. 编译时使用调试参数-g cc –g –o myp f1.c f2.c f3.c 2.启动 gdb: gdb myp #在第七行设置断点
实验二
进程控制
熟悉 linux 和 windows 下进程的管理,包括创建,睡眠,销毁等。
实 验 要 求
具体题目 1 Linux 系统常用进程管理命令的使用(操作系统观察级) 2 Linux 系统常用进程创建与管理的系统调用(原码阅读与系统编程级) 3 Windows 平台常用进线程控制 API(原码阅读与系统编程级) 系统平台 Linux Windows #include <sys/types.h> #include <unistd.h> #include <errno.h> #include <stdio.h> int main() { pid_t ret; int status,i, role = -1; ret= fork(); if(ret>0) { printf("Parent: this is the parent process (pid %d)\n",getpid()); for(i=0;i<6;i++) { printf("Parent: At count %d\n",i); sleep(2); } ret = wait(&status); role = 0; } else if(ret == 0) { printf("Child: this is the Child process (pid %d)\n",getpid()); for(i=0;i<6;i++) { printf("Child: At count %d\n",i); sleep(2); } role = 1; } else { printf("Parent: Error trying to fork() (%d)\n",errno); }
进程调用和创建
实 验 结 果 及 分 析
Window 系统下的 API
当一个进程调用了 fork 以后,系统会创建一个子进程.这个子进程和父进 程不同的地方只有他的进程 ID 和父进程 ID,其他的都是一样.就象符进 程克隆 (clone) 自己一样. 当然创建两个一模一样的进程是没有意义的 . 为了区分父进程和子进 程,我们必须跟踪 fork 的返回值. 当 fork 掉用失败的时候(内存不足或者是 用户的最大进程数已到)fork 返回-1,否则 fork 的返回值有重要的作用.对 于父进程 fork 返回子进程的 ID,而对于 fork 子进程返回 0.我们就是根据这
姓名
学号
组内分工
自我评分
教师评分
小 组 成 绩 评 定
教师签名: 年 月 日
实验 分项 1 实 验 目 的
操作系统实验环境熟悉(Linux 操作命令、Linux/Windows 平台编程工具)
1、 熟练掌握 linux 系统下的常用命令。 2、windows 平台下 IDE 中 API 的使用。
实 验 要 求
院 专 年
系: 计算机科学学院 业:计算机科学与技术 级: 2011 级
课程名称: 计算机操作系统 指导教师: 张辉
学 姓
号: 名:
2014 年 12 月 10 日
年级 组号 实验 名称
2011 级
专 业 实验室
计算机科学与技术 9#206 计算机操作系统实验 分项内容 实验级别
班级 日期
实 验 内 容
实验一 操作系统实验环境熟悉( Linux 操作命令、 Linux/Windows 平台编程工具) 实验二 进程控制 实验三 进程同步与通信管理 实验四 虚拟内存管理 实验五 文件系统与磁盘管理 小 组 成 员
操作系统使用级 操作系统观察级原码阅 读与系统编程级 操作系统使用级 操作系统观察级 操作系统管理级原码阅 读与系统编程级
实 验 原 理 步 骤 ( 算 法 流 程 )
int APIShellExecute() { cin.get(); cout << "ShellExecute(NULL,\"open\",\"NotePad\",NULL,NULL,SW_RESTORE)"<<endl; ShellExecute(NULL,"open","NotePad",NULL,NULL,SW_RESTORE); cin.get(); cout << "ShellExecute(NULL,\"open\",\"\.\\test.txt\",NULL,NULL,SW_RESTORE)"<<endl; ShellExecute(NULL,"open","\.\\test.txt",NULL,NULL,SW_RESTORE); cin.get(); cout << "ShellExecute(NULL,\"open\",\"Calc\",NULL,NULL,SW_RESTORE)"<<endl; ShellExecute(NULL,"open","Calc",NULL,NULL,SW_RESTORE); cin.get();
实 验 原 理 步 骤 ( 算 法 流 程 )
printf("%s: Exiting...\n",((role == 0) ? "Parent" : "Child")); nt main(int argc, char* argv[]) { //用来存放快照进程信息的一个结构体 PROCESSENTRY32 pe32; //如果想进一步了解可以查看 API 文档 pe32.dwSize = sizeof(pe32); //给系统内的所有进程拍照 HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //快照中包含进程列表 if (hProcessSnap == INVALID_HANDLE_VALUE) { printf("CreateToolhelp32Snapshot 调用失败! \n"); return -1; } //遍历进程快照,轮流显示每个进程信息 BOOL bMore = ::Process32First(hProcessSnap,&pe32); //从第一个开始 while (bMore) { printf(" 进程 ID 为:%u ",pe32.th32ProcessID); printf(" 进程名称为:%s\n",pe32.szExeFile); bMore = ::Process32Next(hProcessSnap,&pe32); //遍历下一个 } ::CloseHandle(hProcessSnap); //清除 snapshot 对象 cin.get(); return 0;
相关主题