操作系统上机实验报告应成龙
《操作系统》实验报告(3) (2)

#include <stdio.h>
main(){
int p1, p2;
while ((p1=fork())==-1);
if (p1==0)
printf(“this is the child1 process!\n”);
else {
while ((p2=fork())==-1);
exit(0);}
else if(pid==0)
{execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,(char *)0);
exit(0);}
else
{pid=waitpid(pc,NULL,0);
printf(“the child process:%d\n”,pid);}
while ((p2=fork())==-1);/*父进程创建第二个进程,直到成功*/
if (p2==0)/* 0返回给子进程2*/
putchar(‘c’);/*子进程2的处理过程*/
else putchar(‘a’);/*子进程2创建完成后,父进程的处理过程*/}
}
多次运行结果大多数都是bca,偶尔会出现bac或者cab。进程的处理过程太短,多次运行可能出现差错。
任务6:编写一段程序,使用系统调用fork( )创建一个子进程。子进程通过系统调用exec系列函数调用命令ls,调用exit( )结束。而父进程则调用waitpid( )等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。
创建进程的系统调用:
fork( ),创建一个新进程。
系统调用格式:pid=fork( );
}
任课教师签名:2011年4月日
操作系统上机实验报告

操作系统上机实验报告实验一进程的建立1.实验目的学会通过基本的Windows进程控制函数,由父进程创建子进程,并实现父子进程协同工作。
2.实验软硬件环境Dev-C++3.实验内容创建两个进程,让子进程读取一个文件,父进程等待子进程读取完文件后继续执行,实现进程协同工作。
进程协同工作就是协调好两个进程,使之安排好先后次序并以此执行,可以用等待函数来实现这一点。
当需要等待子进程运行结束时,可在父进程中调用等待函数。
4.实验程序及分析实验程序源代码如下:父进程:#include<stdio.h>#include<windows.h>int main(){STARTUPINFO si;PROCESS_INFORMA TION pi; //当Windows创建新进程时,将使用这两个结构体的有关成员。
所以在创建子进程之前应该对结构体进行声明和初始化。
ZeroMemory(&pi,sizeof(pi));ZeroMemory(&si,sizeof(si));si.cb=sizeof(STARTUPINFO);if(CreateProcess("lab1.2.exe",NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL ,NULL,&si,&pi))//创建一个新进程,若是成功,就返回1,进而实现if选择{printf("子进程已创建~\n");int i,sum=0;for(i=1;i<=100;++i){sum+=i;printf("sum=%d\n",sum);} //进行1+2+3+….+100计算WaitForSingleObject(pi.hProcess,INFINITE); FILE *fp;fp=fopen("date.txt","r");char ch=fgetc(fp); //创建文件并打开while(ch!=EOF){putchar(ch);ch=fgetc(fp);}fclose(fp); //关闭文件}elseprintf("子进程创建失败~\n");return 0;}子进程:#include<stdio.h>#include<stdlib.h>int main(){printf("子进程运行~\n");FILE *fp;if(fp=fopen("date.txt","w")){printf("已经创建文件!\n");int i;for(i=48;i<58;i++) fputc(i,fp);fputc('\n',fp);fclose(fp);printf("已经写入数据:"); //向文本中写入数据fp=fopen("date.txt","r");char ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp); //输出数据}fclose(fp);}else printf("创建文件失败!\n");system("pause");return 0;}5. 实验截图说明及分析6. 实验心得体会掌握了父进程创建子进程的方法,对操作系统多线程认识更深了。
《操作系统》课内实验报告

《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在计算机实验室进行,使用的操作系统为 Windows 10 和Linux(Ubuntu 发行版)。
实验所使用的计算机配置为:Intel Core i5 处理器,8GB 内存,500GB 硬盘。
三、实验内容1、进程管理在 Windows 系统中,通过任务管理器观察进程的状态、优先级、CPU 使用率等信息,并进行进程的结束和优先级调整操作。
在 Linux 系统中,使用命令行工具(如 ps、kill 等)实现相同的功能。
2、内存管理使用 Windows 系统的性能监视器和资源监视器,查看内存的使用情况,包括物理内存、虚拟内存的占用和分配情况。
在 Linux 系统中,通过命令(如 free、vmstat 等)获取类似的内存信息,并分析内存的使用效率。
3、文件系统管理在 Windows 系统中,对文件和文件夹进行创建、复制、移动、删除等操作,了解文件的属性设置和权限管理。
在 Linux 系统中,使用命令(如 mkdir、cp、mv、rm 等)完成相同的任务,并熟悉文件的所有者、所属组和权限设置。
4、设备管理在 Windows 系统中,查看设备管理器中的硬件设备信息,安装和卸载设备驱动程序。
在 Linux 系统中,使用命令(如 lspci、lsusb 等)查看硬件设备,并通过安装内核模块来支持特定设备。
四、实验步骤1、进程管理实验(1)打开 Windows 系统的任务管理器,切换到“进程”选项卡,可以看到当前系统中正在运行的进程列表。
(2)选择一个进程,右键点击可以查看其属性,包括进程 ID、CPU 使用率、内存使用情况等。
(3)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。
操作系统上机实习报告

文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构; 即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系 统种类。因此,可以说"我有 2 个文件系统"意思是他有 2 个分区,一个存文 件,或他用 "扩展文件系统",意思是文件系统的种类。 通过本次的课程设计,使我对文件系统有了更加深刻的了解,能够正确运用 操作系统课程中所学的基本理论和知识, 加深了对多用户文件系统以及二级目录 的磁盘文件系统的文件操作, 让自己对 C++的应用多了一份了解, 算是自己用 C++
3
char ch; char jian; printf("\t\t\t\t李策----文件管理系统.0\n\t\t\t\t\n"); //打开主文件 fpm=fopen("C:\\MasterFile.txt","rb"); 目录信息文件 if(fpm==NULL) { printf("\n提示:主文件目录信息文件还不存在,是否创 建?(y/n)\n"); scanf("%s",& struct MasterFile {
5
char username[20]; //用户名 char password[20]; //用户名密码 char flag; //标志 MasterFile *next; // }; //用户文件结构体 struct UserFile { int fnum; char fname[20]; int flength; char flag; char fpw[20]; UserFile *link; };
n=='y'||jian=='Y') fpm=fopen("C:\\MasterFile.txt","wb"); //创建主文件目 录的文件 else exit(0); } fpu=fopen("C:\\UserFile.txt","rb"); //打开用户文件目录信息文件 if(fpu==NULL) { printf("\n提示:用户文件目录信息文件还不存在,是否创 建?(y/n)\n"); scanf("%s",&jian); if(jian=='y'||jian=='Y') fpu=fopen("C:\\UserFile.txt","wb"); //创建用户文件目 录的文件 else exit(0); } printf("文件正在打开,请稍等..."); for(int i=0;i<20;i++) //读取主 文件目录信息 fread(&MFD[i],sizeof(struct MasterFile),1,fpm); //将文 件的内容放入接点中 fclose(fpm); // 关闭文件 while(!feof(fpu)) { //读取用户目录文件信息 for(int i=0;i<20;i++) { if(fread(&UFD[i][0],sizeof(struct UserFile),20,fpu)) //将文件的内容放入接点中 MFD[i].next=(struct MasterFile*)&UFD[i][0]; } } //关闭文件 fclose(fpu);
操作系统上机实验报告

操作系统上机实验报告篇一:操作系统上机实验报告(13版)编者说明《操作系统》是计算机科学与技术专业的一门核心专业基础课。
学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。
这些原理与技巧可以说是计算机界的前辈们一代接一代不停歇的努力所留下的知识与智慧的结晶,学习和掌握它们对于激发自己的创造力和想象力是很有帮助的。
如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法就是在实践中练习,通过自己模拟设计操作系统的原理实验,可以培养程序设计的方法和技巧,提高编制和理解清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。
使自身更好的掌握操作系统的基本概念、基本原理及基本功能,从而具有分析实际操作系统的基本能力,深入直观的理解操作系统使用的各类算法。
《操作系统实验指导书》是针对这门课的实验编写的,书中设计了三个操作系统原理实验。
三个实验难易层次分明,重点突出,其中实验一(Windows操作系统)和实验二(进程管理)为验证性实验,重在验证教材中的理论原理,而实验三(虚拟存储管理)为设计性实验,重在培养理论原理应用于实践的设计能力。
所有实验共8学时,采用C语言作为编程语言模拟设计完成相关程序。
限于编者的水平,难免有疏(本文来自: 千叶帆文摘:操作系统上机实验报告)漏与错误,敬请读者批评指正。
编者:李可实验一Windows操作系统一、实验题目计算机管理、任务管理、察看了解注册表二、实验目的Windows是目前使用人数最多的操作系统,学习操作系统,对操作系统有更加深入的了解。
三、实验内容1. Windows提供了那些人机交互的界面?2. 观察Windows对应用程序运行的支持。
Windows提供了几种方式启动应用程序?Windows提供了几种方式让用户改变应用程序外观?Windows提供了几种方式结束程序的运行?3. 了解windows对应用程序的运行时对I/O支持。
操作系统上机实验报告

操作系统课程设计实验报告册班级: 130812学号: ********姓名:**目录实验1 Linux系统调用 (2)实验2 实现spinlock以及共享内存调用 (5)实验3 内核模块 (14)实验4 设备驱动 (18)实验5 文件系统 (22)实验编号 1 题目Linux系统调用实验目的加深对系统函数库、操作系统提供的系统调用的共同点和差异的认识,通过认识、了解Linux系统调用的实现方式,强化操作系统为用户提供接口方式的理性认识。
实验内容为Linux内核增加一个系统调用,并编写用户进程的程序来测试。
要求该系统调用能够完成以下功能:1. 该系统调用有1个整型参数。
2. 若参数大于0,则返回自己学号的最后一位。
如学号为248,则返回8。
3. 若参数小于或等于0,则返回自己的学号。
如学号为248,则返回248。
报告内容要求(1) 程序实现方法和思路(2) 测试及结果报告正文一、实验准备联网下载版本为2.6.25.14的linux内核压缩包,使用U盘放入WMware 中安装的Fedora9操作系统中。
解压后文件夹:/usr/src/linux-2..6.25.14。
二、实验步骤(一)、修改内核文件(1)修改内核文件:/usr/src/linux-2..6.25.14/kernel/sys.c 在sys.C文件中添加新的系统调用实现,如下所示:asmlinkage int sys_mycall(int a){if(a>0)return 5;elsereturn 13081175;}截图:(2)在system call table中增加新的系统调用表项,寻找文件/usr/src/linux-2..6.25.14/arch/x86/kernel/syscall_table_32.h,在最后一行添加:.long sys_mycall /*327*/截图:(3)增加新的系统调用编号:修改文件/usr/src/linux-2..6.25.14/include/asm-x86/unistd_32.h 的最后一行,增加:#define __NR_mycall 327 /*my new syscall*/数字紧跟上一行最后一个系统调用的编号。
操作系统上机实验报告

操作系统上机实验报告学院:计算机科学与技术学院专业:计算机科学与技术学号:姓名:读者-写者的读写限制(包括读者优先和写者优先)1)写-写互斥,即不能有两个写者同时进行写操作2)读-写互斥,即不能同时有一个读者在读,同时却有一个写者在写3)读读允许,即可以有2个以上的读者同时读读者优先的限制:如果一个读者申请读操作时,已经有一个读者在读,则该读者可以直接读写者优先的限制:如果一个读者申请读操作时,有写者在等待访问共享资源时,则该读者要等到没有写者处于等的状态时才能开始读操作代码部分:#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>#include <sys/shm.h>#include <signal.h>#include <unistd.h>#include <stdarg.h>#include <assert.h>#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <time.h>/*** @struct SHM_ACCESS* @brief 读者写者访问控制结构*/typedef struct _SHM_ACCESS {int reader_count; /**< 读者计数器 */int reader_mutex; /**< 读者互斥量 */int writer_mutex; /**< 写者互斥量 */} SHM_ACCESS;typedef struct _READER_WRITER_SHM {SHM_ACCESS shm_access;int shm_reader;int shm_writer;} READER_WRITER_SHM;static sig_atomic_t term_flag = 0;intlogv(const char *fmt, ...){int n;struct timeval tv;struct tm lt;char buf[14];va_list ap;gettimeofday(&tv, 0);lt = *localtime(&_sec);strftime(buf, sizeof(buf), "%H:%M:%S.", <);snprintf(buf + 9, sizeof(buf) - 9, "%03d", (int)(_usec / 1000)); n = printf("%s ", buf);va_start(ap, fmt);n += vprintf(fmt, ap);va_end(ap);return n;}/** System V IPC 函数的简化接口*/intsem_p(int semid){int rc;struct sembuf buf;buf.sem_num = 0;buf.sem_op = -1;buf.sem_flg = SEM_UNDO;for (;;) {rc = semop(semid, &buf, 1); if (0 == rc)break;if (rc < 0) {if (EINTR == errno)continue;else {assert(0);}}}}intsem_v(int semid){int rc;struct sembuf buf;buf.sem_num = 0;buf.sem_op = +1;buf.sem_flg = SEM_UNDO;for (;;) {rc = semop(semid, &buf, 1); if (0 == rc)break;if (rc < 0) {if (EINTR == errno)continue;else {assert(0);}}}return rc;}intsem_get(const char *path, int id){int semid;key_t semkey;int rc;union semun {int val;struct semid_ds *buf;unsigned short *array;} arg;semkey = ftok(path, id);if ((key_t)-1 == semkey) {return (-1);}semid = semget(semkey, 1, IPC_CREAT | SEM_R | SEM_A); if (semid < 0)return semid;arg.val = 1;rc = semctl(semid, 0, SETVAL, arg);assert(0 == rc);return semid;}intsem_del(const char *path, int id){int semid;key_t semkey;int rc;semkey = ftok(path, id);if ((key_t)-1 == semkey) {return (-1);}semid = semget(semkey, 1, SEM_R | SEM_A);return sem_rmid(semid);}intsem_rmid(int semid){int rc;rc = semctl(semid, 0, IPC_RMID);return rc;}intshm_get(const char *path, int id, size_t size){int shmid;key_t semkey;semkey = ftok(path, id);if ((key_t)-1 == semkey) {return (-1);}shmid = shmget(semkey, size, IPC_CREAT | SHM_R | SHM_W); if (shmid < 0)return shmid;return shmid;}/** 共享内存读写控制函数*/intLockShmForWrite(SHM_ACCESS *p_access){sem_p(p_access->writer_mutex);return (0);}intUnLockShmForWrite(SHM_ACCESS *p_access){sem_v(p_access->writer_mutex);return (0);}intLockShmForRead(SHM_ACCESS *p_access){sem_p(p_access->reader_mutex);p_access->reader_count++;logv("reader_count = %d\n", p_access->reader_count); if (1 == p_access->reader_count) {/* 第一个读进程 */sem_p(p_access->writer_mutex);}sem_v(p_access->reader_mutex);return (0);}intUnLockShmForRead(SHM_ACCESS *p_access){sem_p(p_access->reader_mutex);p_access->reader_count--;logv("reader_count = %d\n", p_access->reader_count); if (0 == p_access->reader_count) {/* 最后一个读进程 */sem_v(p_access->writer_mutex);}sem_v(p_access->reader_mutex);return (0);}void*shm_at(int shmid){return shmat(shmid, NULL, 0);}intshm_dt(const void *shmaddr){return shmdt(shmaddr);}intshm_rmid(int shmid){return shmctl(shmid, IPC_RMID, NULL);}void(*Signal(int sig, void (*func)(int)))(int){struct sigaction act, oact;act.sa_handler = func;sigemptyset(&act.sa_mask);act.sa_flags = 0;#ifdef SA_INTERRUPTact.sa_flags |= SA_INTERRUPT;#endifif (sigaction(sig, &act, &oact) < 0)return(SIG_ERR);return(oact.sa_handler);}#define KEY_FILE "KEY_FILE"intstarter(void){int shmid;int semid;READER_WRITER_SHM *ptr;shmid = shm_get(KEY_FILE, 1, sizeof(READER_WRITER_SHM)); ptr = (READER_WRITER_SHM *)shm_at(shmid);semid = sem_get(KEY_FILE, 2);ptr->shm_access.reader_mutex = semid;ptr->shm_access.reader_count = 0;semid = sem_get(KEY_FILE, 3);ptr->shm_access.writer_mutex = semid;return 0;}intcleaner(void){int shmid;int semid;READER_WRITER_SHM *ptr;sem_del(KEY_FILE, 3);sem_del(KEY_FILE, 2);shmid = shm_get(KEY_FILE, 1, sizeof(READER_WRITER_SHM)); shm_rmid(shmid);return 0;}voidsig_term(int sig){term_flag++;}voidsig_intr(int sig){}intreader(void){int shmid;pid_t pid;READER_WRITER_SHM *ptr;shmid = shm_get(KEY_FILE, 1, sizeof(READER_WRITER_SHM)); ptr = (READER_WRITER_SHM *)shm_at(shmid);pid = getpid();srand(time(0) + pid);while (!term_flag) {sleep(rand() % 20);logv("reader-%10d come\n", (int)pid);LockShmForRead(&ptr->shm_access);logv("reader-%10d read begin\n", (int)pid);sleep(rand() % 10);logv("reader-%10d read end\n", (int)pid);UnLockShmForRead(&ptr->shm_access);}return 0;}intwriter(void){int shmid;pid_t pid;READER_WRITER_SHM *ptr;shmid = shm_get(KEY_FILE, 1, sizeof(READER_WRITER_SHM)); ptr = (READER_WRITER_SHM *)shm_at(shmid);pid = getpid();srand(time(0) + pid);while (!term_flag) {sleep(rand() % 20);logv("writer-%10d come\n", (int)pid);LockShmForWrite(&ptr->shm_access);logv("writer-%10d write begin\n", (int)pid);sleep(rand() % 10);logv("writer-%10d write end\n", (int)pid);UnLockShmForWrite(&ptr->shm_access);}return 0;}#define M 8#define N 2intmain(int argc, char *argv[]) {int i, m, n;pid_t pid[M + N];m = M, n = N;Signal(SIGTERM, &sig_term);starter();for (i = 0; i < m; i++) { pid[i] = fork();if (pid[i] == 0) {reader();exit(0);} else {continue;}}for (i = 0; i < n; i++) { pid[i + m] = fork();if (pid[i + m] == 0) { writer();exit(0);} else {continue;}}Signal(SIGINT, &sig_intr);pause();for (i = 0; i < M + N; i++) kill(pid[i], SIGTERM);for (i = 0; i < M + N; i++)waitpid(pid[i], NULL, 0);cleaner();return 0;}。
操作系统上机实验报告(13版)

编者说明《操作系统》是计算机科学与技术专业的一门核心专业基础课。
学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。
这些原理与技巧可以说是计算机界的前辈们一代接一代不停歇的努力所留下的知识与智慧的结晶,学习和掌握它们对于激发自己的创造力和想象力是很有帮助的。
如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法就是在实践中练习,通过自己模拟设计操作系统的原理实验,可以培养程序设计的方法和技巧,提高编制和理解清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。
使自身更好的掌握操作系统的基本概念、基本原理及基本功能,从而具有分析实际操作系统的基本能力,深入直观的理解操作系统使用的各类算法。
《操作系统实验指导书》是针对这门课的实验编写的,书中设计了三个操作系统原理实验。
三个实验难易层次分明,重点突出,其中实验一(Windows操作系统)和实验二(进程管理)为验证性实验,重在验证教材中的理论原理,而实验三(虚拟存储管理)为设计性实验,重在培养理论原理应用于实践的设计能力。
所有实验共8学时,采用C语言作为编程语言模拟设计完成相关程序。
限于编者的水平,难免有疏漏与错误,敬请读者批评指正。
编者:李可实验一Windows操作系统一、实验题目计算机管理、任务管理、察看了解注册表二、实验目的Windows是目前使用人数最多的操作系统,学习操作系统,对操作系统有更加深入的了解。
三、实验内容1.Windows提供了那些人机交互的界面?2.观察Windows对应用程序运行的支持。
●Windows提供了几种方式启动应用程序?●Windows提供了几种方式让用户改变应用程序外观?●Windows提供了几种方式结束程序的运行?3.了解windows对应用程序的运行时对I/O支持。
系统中有多少个I/O设备?多少种I/O控制方式?能否确信应用程序I/O需要操作系统支持?能体会到“设备独立性”吗?4.观察资源管理器,记录你使用的机器的资源情况:CPU、内存、磁盘分区及容量、文件目录树及文件属性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计(上机实验)报告
课程名称:操作系统原理上机实习
学生姓名:应成龙学号: 1403140126 所在学院:计算机科学与技术
专业:计算机科学与技术
指导教师:钱景辉
2016 年1月5日
课程设计(上机实验)报告填写说明
1.本报告作为指导教师对学生课程设计(上机实验)评分的依据材料之一。
此报告应在指导教师指导下,由学生在课程设计(上机实验)结束时完成,以班为单位收齐后按时交给指导教师批阅;
2.本报告内容必须用黑墨水笔工整书写或按信息学院统一设计的电子文档标准格式(可从信息学院网页上下载)打印(小4号宋体,1.5倍行距),禁止打印在其它纸上后剪贴;
3.本报告中的“设计说明书”应按论文的格式成文,并直接书写(或打印)在本报告“设计说明书”栏目内。
其内容可以结合设计题目的内容和要求,根据自己在本课程设计(上机实验)阶段所完成的工作,阐明自己所采取的设计思想和方法(硬件的设计及其电原理图分析介绍,和/或软件的算法和数据结构及其主要模块介绍、程序在测试用例下的测试运行结果等)、完成本课程设计的心得体会、设计中的不足及改进设计的设想或建议等。
说明书的篇幅应不少于2000字。
4.对硬件类课程设计,应绘制或打印硬件设计图纸或实验原理图,作为设计报告的附件。
5.软件类课程设计(上机实验)的软件文档(含软件清单和程序运行的有关结果)可以单独打印成册或上传到指导教师指定计算机,作为课程设计报告的附件。
课程设计(上机实验)报告的附件是指导教师对学生课程设计(上机实验)评分的另一个依据。
课程设计(上机实习)报告
课程设计(上机实习)报告
指导教师意见。