操作系统上机报告

合集下载

操作系统上机实验报告

操作系统上机实验报告

操作系统上机实验报告实验一进程的建立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. 实验心得体会掌握了父进程创建子进程的方法,对操作系统多线程认识更深了。

操作系统课程_上机报告

操作系统课程_上机报告

操作系统课程设计实验报告册目录实验说明本课程由操作系统实验和操作系统课程设计专题两部分组成,共计56学时,分7次实施,每次8学时。

本课程使用Linux系统为实验平台,推荐使用ubuntu 10.04/内核版本2.6.32-28/源码版本2.6.32-60;重要提示实验1 Linux(虚拟机)安装及Linux常用命令使用实验2 makefile的编写及Linux内核编译实验3 Linux的进程和线程实验4 同步与互斥实验5 文件系统实验说明1.实验做为学习的重要促进手段,是为了深化对理论的理解,锻炼实践动手能力。

2.实验同时也作为考核的手段。

3.实验内容会在课程进行中下达,并且会分次地、部分地被抽查。

4.课程结束时,要求把所有的实验整理成一个完整的电子文档并上交,做为最后成绩的评定依据。

5.如果有兴趣的合适的题目,也可自己选题目。

格式说明1.本文档文件名命名为“学号-姓名”,如“13071000_小王”。

2.留白部分不足的自己调整长度,也可加页(增加内容应在表格内)。

3.每次的实验报告都要在这个文件中(按照实验次序依次)增加,而不是每次一个新的word文件。

4.本文档保存为doc格式(请勿用Word2007的docx格式)。

重要提示:1.实验正文建议使用小四号或五号宋体。

2.若附加图形,则请直接嵌入到实验手册相应位置。

3.各实验的源程序,请按实验分目录存放,如第一个实验的源程序存放在目录lab1下,第二个实验的源程序存放在目录lab2下等等,依次类推。

4.可互相讨论,但严禁抄袭网络或同学的实验结果。

更改设置:。

操作系统上机实习报告

操作系统上机实习报告

文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构; 即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系 统种类。因此,可以说"我有 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",&amp; 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",&amp;jian); if(jian=='y'||jian=='Y') fpu=fopen("C:\\UserFile.txt","wb"); //创建用户文件目 录的文件 else exit(0); } printf("文件正在打开,请稍等..."); for(int i=0;i<20;i++) //读取主 文件目录信息 fread(&amp;MFD[i],sizeof(struct MasterFile),1,fpm); //将文 件的内容放入接点中 fclose(fpm); // 关闭文件 while(!feof(fpu)) { //读取用户目录文件信息 for(int i=0;i<20;i++) { if(fread(&amp;UFD[i][0],sizeof(struct UserFile),20,fpu)) //将文件的内容放入接点中 MFD[i].next=(struct MasterFile*)&amp;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*/数字紧跟上一行最后一个系统调用的编号。

计算机操作系统上机实验报告

计算机操作系统上机实验报告

计算机操作系统(cāo zuò xì tǒnɡ)上机实验报告
云南师范大学信息(xìnxī)学院
实验报告
学号:134100010姓名:姜兴玲班级:计科13A 课程名称:操作系统实验名称:存储管理
实验性质:①综合性实验②设计性实验③验证性实验试验时间:2015年5月5日试验地点:睿智4栋212
本试验所用的设备:计算机一台
实验目的
了解计算机的存储并学会管理。

实验内容及过程:
1.右键单击工具栏,打开任务管理器查看性能来了解CPU
使用和页面文件使用。

2、单击开始设置控制面板系统
单击高级然后选择性能的设置来设置系统、管理系统
3、性能和维护打开控制面板切换到分类视图,选择性能和维护来进行操作。

小结:
通过对控制面板的熟悉我们能更好的了解计算机并且能对存储管理更好的了解和学习!
任课教师评语
教师签字: 年月日
注:每学期至少一次设计性实验。

每学期结束请任课教师按时按量统一(tǒngyī)交到教学秘书处
内容总结
(1)计算机操作系统上机实验报告。

操作系统上机实验报告

操作系统上机实验报告

操作系统上机实验报告学院:计算机科学与技术学院专业:计算机科学与技术学号:姓名:读者-写者的读写限制(包括读者优先和写者优先)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.", &lt);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版)

操作系统上机实验报告(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、内存、磁盘分区及容量、文件目录树及文件属性。

操作系统上机报告

操作系统上机报告

操作系统上机报告操作系统上机报告章节一:引言本报告是关于操作系统上机实验的报告,旨在总结和分析实验过程中所遇到的问题和解决方案。

章节二:实验目的本次实验的目的是通过实践,加深对操作系统相关概念和原理的理解,同时熟悉操作系统的基本操作和管理。

章节三:实验环境3.1 硬件环境:电脑一台,配置如下:- CPU:Intel Core i5- 内存.8GB- 硬盘.256GB SSD3.2 软件环境:- 操作系统:Windows 10- 虚拟机软件:VMware Workstation- 实验用操作系统镜像:Ubuntu 20.04 LTS章节四:实验内容4.1 安装虚拟机软件- 步骤1:并安装VMware Workstation- 步骤2:创建虚拟机- 步骤3:配置虚拟机网络4.2 安装Ubuntu操作系统- 步骤1:Ubuntu 20.04 LTS镜像- 步骤2:创建虚拟机,并加载镜像- 步骤3:安装Ubuntu操作系统4.3 操作系统基本设置- 步骤1:更新系统软件包- 步骤2:添加用户- 步骤3:配置网络设置4.4 命令行操作- 步骤1:掌握常用命令(如ls、cd、mkdir等)- 步骤2:文件和目录操作(如复制、移动、删除等)- 步骤3:权限管理(如chmod命令)4.5 进程管理- 步骤1:查看系统进程- 步骤2:启动和停止进程- 步骤3:进程监控和调度4.6 文件系统管理- 步骤1:了解文件系统结构- 步骤2:文件和目录的创建和删除- 步骤3:文件系统的挂载和卸载章节五:实验总结通过本次实验,我们对操作系统的基本原理和操作有了更深入的理解,熟悉了常用的命令和管理技巧,提高了对操作系统的操作和管理能力。

附件:- 操作系统上机实验源代码- 实验报告中使用的截图法律名词及注释:1.版权:对作品(如文学、艺术、音乐、软件等)的作者享有的法律权益,保护作者对作品的知识产权。

2.隐私权:个人对其个人信息的保护权利,包括个人身份、健康状况、财务状况等敏感信息的保护。

《操作系统》上机实验一报告

《操作系统》上机实验一报告

《操作系统》上机实验一报告目录一、实验关键问题二、代码设计思路三、实现的关键代码四、程序运行结果五、实验总结一、实验关键问题1.1要求:编写一个Linux系统C程序,由父亲创建2个子进程,再由子进程各自从控制台接收一串字符串,保存在各自的全局字符串变量中,然后正常结束。

父进程调用waitpid等待子进程结束,并分别显示每个子进程的进程标识号和所接收的字符串。

1.2要求:父进程创建一子进程,父进程向子进程发送数据,子进程接收数据,并写入文件。

二、代码设计思路2.1 问题1.1的代码设计思路由父进程创建两个共享内存→分别创建两个子进程→提示用户输入信息,并将信息存到子进程各自对应的共享内存中→等待子进程结束→子进程结束后,父进程被唤醒并与共享内存连接→分别从这两个内存共享中获取数据,并把数据和对应的子进程PID输出到屏幕上→父进程结束2.2问题1.2的代码设计思路由父进程创建管道→创建子进程→父进程关闭读管道,获取用户输入的数据→把数据写入写管道中,关闭写管道→等待子进程结束,此时父进程挂起→子进程关闭写管道→子进程读取父进程放入读管道中的数据,显示数据到屏幕上→将数据写入文件“CP_file.txt”中→关闭读管道,关闭文件→结束子进程→父进程被唤醒后父进程也结束。

三、实现的关键代码3.1 问题1.1的实现代码#include <unistd.h>#include <sys/ipc.h>#include <sys/shm.h>#include <sys/types.h>#include <sys/wait.h>#include <stdio.h>#include <stdlib.h>#define Key0 9876#define Key1 5432#define Size 2048 //Size表示共享内存大小,此处设置为2048int main(){int shmid1, shmid2;//共享内存的标识符//父进程创建共享内存shmid1和shmid2shmid1 = shmget(Key0, Size, IPC_CREAT|0600);shmid2 = shmget(Key1, Size, IPC_CREAT|0600);pid_t pid1, pid2;//子进程标识符char *shmaddr;//连接地址//父进程创建子进程pid1if ((pid1 = fork()) == 0){shmaddr = (char*)shmat(shmid1, NULL, 0);/*shmat()实现子进程pid1与共享内存shmid1的连接*/printf("Child process 1 is running now, enter a string:");/*请求用户输入一个字符串*/fgets(shmaddr, Size-1, stdin);/*fgets()将信息存到shmaddr所指的内存空间*/shmdt(shmaddr);/*shmdt()使该进程脱离该共享内存断,但并不删除该内存段*/return 0;}printf("\nWaitting for child process 1...\n");waitpid(pid1, NULL, 0);//等待子进程pid1结束printf("Child process 1 is over...\n");//父进程创建子进程pid2if ((pid2 = fork()) == 0){shmaddr = (char*)shmat(shmid2, NULL, 0);printf("Child process 2 is running now, enter a string:");fgets(shmaddr, Size-1, stdin);shmdt(shmaddr);return 0;}printf("\nWaitting for chils process 2...\n");waitpid(pid2, NULL, 0);printf("Child process 2 is over...\n\n");shmaddr = (char*)shmat(shmid1, NULL, 0); /*父进程与共享内存shmid1连接*/printf("Child process 1: PID=%d message: %s\n", pid1, shmaddr);/*屏幕显示共享内存shmid1的信息*/shmdt(shmaddr);shmctl(shmid1, IPC_RMID, NULL);//删除共享内存shmid1shmaddr = (char*)shmat(shmid2, NULL, 0);printf("Child process 2: PID=%d message: %s\n", pid2, shmaddr);shmdt(shmaddr);shmctl(shmid2, IPC_RMID, NULL);return 0;}3.2 问题1.2的实现代码#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/wait.h>#define maxsize 2048//maxsize表示传送的最大数据量,此处设置为2048 int main(){pid_t pid;//子进程标识符int pip[2];//管道描述符//创建管道if (pipe(pip) < 0)//管道创建失败{printf("Faile to create pipe!\n");return -1;}//创建子进程if ((pid = fork()) < 0)//子进程创建失败{printf("Faile to create child process!\n");return -1;}char buffer[maxsize];// 数据缓冲区FILE *file;// 文件描述符//子进程执行if ( pid==0 ){close(pip[1]);// 关闭写管道read(pip[0], buffer, maxsize);// 读取父进程发送的管道数据close(pip[0]);// 关闭读管道//屏幕输出子进程接收到得信息printf("Child process is running now, the received record:\n%s", buffer);if ((file=fopen("CP_file.txt", "w"))==NULL)/*打开CP_file.txt文件失败*/{printf("Error!Can't open CP_file.txt.\n");exit(1);}else{fputs(buffer, file);// 成功打开CP_file.txt文件,将数据写入文件中fclose(file);// 关闭文件return 0;}}//父进程执行else{close(pip[0]);// 关闭读管道printf("Parent process is running now, enter the record:\n");fgets(buffer, maxsize-1, stdin);// 接收用户输入的数据write(pip[1], buffer, maxsize);// 接收用户输入的数据close(pip[1]);// 关闭写管道waitpid(pid, NULL, 0);// 父进程等待子进程结束return 0;}}四、程序运行结果4.1 问题1.1的程序运行结果(图4.1所示)(图4.1)4.2 问题1.2的程序运行结果(图4.2所示)(图4.2)五、实验总结通过本次上机实验,我的收获很多。

操作系统上机实验报告(西电)

操作系统上机实验报告(西电)

操作系统上机题目一、题目实验1:LINUX/UNIX Shell部分(一)系统基本命令1.登陆系统,输入whoami 和pwd ,确定自己的登录名和当前目录;登录名yuanye ,当前目录/home/yuanye2.显示自己的注册目录?命令在哪里?a.键入echo $HOME,确认自己的主目录;主目录为/home/yuanyeb.键入echo $PA TH,记下自己看到的目录表;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/gamesc.键入which abcd,看看得到的错误信息;再键入which ls 和which vi,对比刚刚得到的结果的目录是否在a.、b.两题看到的目录表中;/bin/ls /usr/bin/vi3.ls 和cd 的使用:a.键入ls,ls -l ,ls -a ,ls -al 四条命令,观察输出,说明四种不同使用方式的区别。

1. examples.desktop 公共的模板视频图片文档音乐桌面; 总计322.-rw-r--r-- 1 yuanye yuanye 357 2011-03-22 22:15 examples.desktopdrwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 公共的drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 模板drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 视频drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 图片drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 文档drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 音乐drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 桌面3. . .fontconfig .local .Xauthority.. .gconf .mozilla .xsession-errors.bash_logout .gconfd .nautilus 公共的.bashrc .gksu.lock .profile 模板.cache .gnome2 .pulse 视频.chewing .gnome2_private .pulse-cookie 图片.config .gnupg .recently-used.xbel 文档.dbus .gstreamer-0.10 .scim 音乐.dmrc .gtk-bookmarks .sudo_as_admin_successful 桌面.esd_auth .gvfs .update-manager-coreexamples.desktop .ICEauthority .update-notifier4. 总计156drwxr-xr-x 28 yuanye yuanye 4096 2011-03-24 16:55 .drwxr-xr-x 3 root root 4096 2011-03-22 22:15 ..-rw-r--r-- 1 yuanye yuanye 220 2011-03-22 22:15 .bash_logout-rw-r--r-- 1 yuanye yuanye 3115 2011-03-22 22:15 .bashrcdrwxr-xr-x 3 yuanye yuanye 4096 2011-03-22 23:30 .cachedrwx------ 2 yuanye yuanye 4096 2011-03-22 23:24 .chewingdrwxr-xr-x 4 yuanye yuanye 4096 2011-03-22 23:30 .configdrwx------ 3 yuanye yuanye 4096 2011-03-22 22:31 .dbus-rw------- 1 yuanye yuanye 49 2011-03-24 16:54 .dmrc-rw------- 1 yuanye yuanye 16 2011-03-22 22:31 .esd_auth-rw-r--r-- 1 yuanye yuanye 357 2011-03-22 22:15 examples.desktopdrwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:15 .fontconfigdrwx------ 4 yuanye yuanye 4096 2011-03-24 16:54 .gconfdrwx------ 2 yuanye yuanye 4096 2011-03-24 16:56 .gconfd-rw-r----- 1 yuanye yuanye 0 2011-03-22 23:19 .gksu.lockdrwx------ 6 yuanye yuanye 4096 2011-03-22 23:20 .gnome2drwx------ 2 yuanye yuanye 4096 2011-03-22 22:32 .gnome2_privatedrwx------ 2 yuanye yuanye 4096 2011-03-22 22:31 .gnupgdrwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 22:32 .gstreamer-0.10-rw-r--r-- 1 yuanye yuanye 156 2011-03-24 16:55 .gtk-bookmarksdr-x------ 2 yuanye yuanye 0 2011-03-24 16:54 .gvfs-rw------- 1 yuanye yuanye 479 2011-03-24 16:54 .ICEauthoritydrwx------ 3 yuanye yuanye 4096 2011-03-22 23:30 .localdrwx------ 4 yuanye yuanye 4096 2011-03-22 23:29 .mozilladrwxr-xr-x 3 yuanye yuanye 4096 2011-03-22 22:32 .nautilus-rw-r--r-- 1 yuanye yuanye 675 2011-03-22 22:15 .profiledrwx------ 2 yuanye yuanye 4096 2011-03-24 16:54 .pulse-rw------- 1 yuanye yuanye 256 2011-03-22 22:31 .pulse-cookie-rw------- 1 yuanye yuanye 861 2011-03-22 23:30 .recently-used.xbeldrwx------ 3 yuanye yuanye 4096 2011-03-22 23:24 .scim-rw-r--r-- 1 yuanye yuanye 0 2011-03-22 22:35 .sudo_as_admin_successful drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 22:33 .update-manager-core drwx------ 2 yuanye yuanye 4096 2011-03-22 22:32 .update-notifier-rw------- 1 yuanye yuanye 117 2011-03-24 16:54 .Xauthority-rw-r--r-- 1 yuanye yuanye 3385 2011-03-24 16:56 .xsession-errorsdrwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 公共的drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 模板drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 视频drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 图片drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 文档drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 音乐drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 桌面b.利用cd 转到/bin,/sbin ,/etc ,/dev,再利用ls 列出各个目录的内容,如果"迷路",可以利用pwd 确定位置,或键入cd ,cd ~ 观察效果.cd ,cd ~的区别: 1. bash dnsdomainname mountpoint sleepbunzip2 dumpkeys mt sttybzcat echo mt-gnu subzcmp ed mv syncbzdiff egrep nano tailfbzegrep false nc tarbzexe fgconsole nc.traditional tempfilebzfgrep fgrep netcat touchbzgrep fuser netstat truebzip2 fusermount ntfs-3g ulockmgr_serverbzip2recover grep ntfs-3g.probe umountbzless gunzip open unamebzmore gzexe openvt uncompresscat gzip pidof unicode_startchgrp hostname ping vdirchmod ip ping6 whichchown kbd_mode ps zcatchvt kill pwd zcmpcp ld_static rbash zdiffcpio ln readlink zegrepdash loadkeys rm zfgrepdate login rmdir zforcedbus-cleanup-sockets ls rnano zgrepdbus-daemon lsmod run-parts zlessdbus-uuidgen mkdir sed zmoredd mknod setfont znewdf mktemp setupcondir more shdmesg mount sh.distrib2. acpi_available getty mii-tool resize_reiserfsalsa grub-install mkdosfs rmmodalsactl halt mke2fs routeapm_available hdparm mkfs rtacctapparmor_parser hwclock mkfs.bfs rtmonbadblocks ifconfig mkfs.cramfs runlevelblkid ifdown mkfs.ext2 sfdisk blockdev ifup mkfs.ext3 shadowconfig brltty init mkfs.ext4 shutdownbrltty-setup initctl mkfs.ext4dev slattachcfdisk insmod mkfs.minix sscrda installkernel mkfs.msdos startctrlaltdel ip mkfs.reiserfs start-stop-daemon debugfs ip6tables mkfs.vfat status debugreiserfs ip6tables-restore mkreiserfs stopdepmod ip6tables-save mkswap sulogin dhclient ipmaddr modinfo swapoff dhclient3 iptables modprobe swapon dhclient-script iptables-restore mount.fuse sysctldmsetup iptables-save mount.ntfs syslogddosfsck iptunnel mount.ntfs-3g tcdosfslabel isosize mount.vmhgfs telinitdumpe2fs iwconfig nameif tune2fse2fsck iwevent on_ac_power udevadme2image iwgetid pam_tally udevde2label iwlist parted umount.hale2undo iwpriv partprobe unix_chkpwd fdisk iwspy pccardctl unix_update findfs kbdrate pivot_root update-grubfsck killall5 plipconfig usplashfsck.cramfs klogd poweroff usplash_down fsck.ext2 ldconfig rarp usplash_write fsck.ext3 ldconfig.real raw vol_idfsck.ext4 logd readahead-list vstpfsck.ext4dev logsave readahead-watch wpa_action fsck.minix losetup reboot wpa_clifsck.msdos lrm-manager regdbdump wpa_supplicant fsck.nfs lsmod reiserfsckfsck.reiserfs lspcmcia reiserfstunefsck.vfat MAKEDEV resize2fs3. acpi login.defsadduser.conf logrotate.confadjtime logrotate.dalsa lsb-basealternatives lsb-base-logging.shanacrontab lsb-releaseapm ltrace.conf apparmor magicapparmor.d magic.mimeapport mailcapapt mailcap.orderat.deny manpath.configavahi mime.typesbash.bashrc mke2fs.confbash_completion modprobe.dbash_completion.d modules bindresvport.blacklist monoblkid.tab motdblkid.tab.old motd.tailbluetooth mtabbogofilter.cf mtools.confbonobo-activation nanorcbrlapi.key netscsid.confbrltty networkbrltty.conf NetworkManagerca-certificates networksca-certificates.conf nsswitch.confcalendar obex-data-server chatscripts openoffice checkbox.d optcompizconfig pam.conf ConsoleKit pam.dconsole-setup pangoconsole-tools papersizecron.d passwdcron.daily passwd-cron.hourly pcmciacron.monthly perlcrontab pmcron.weekly pnm2ppa.confcups PolicyKitdbus-1 popularity-contest.conf debconf.conf powerdebian_version pppdefault profiledefoma profile.ddeluser.conf protocolsdepmod.d pulse dhcp3 purple dictionaries-common pythondm python2.6 doc-base rc0.ddpkg rc1.de2fsck.conf rc2.d emacs rc3.d environment rc4.d esound rc5.d event.d rc6.d firefox-3.0 rc.localfonts rcS.d foomatic readahead fstab resolvconf fuse.conf resolv.conf gai.conf rmtgamin rpcgconf samba gdm sane.d gimp scim gnome screenrc gnome-app-install scsi_id.config gnome-system-tools securetty gnome-vfs-2.0 security gnome-vfs-mime-magic sensors.conf gre.d services groff sgmlgroup shadow group- shadow- grub.d shells gshadow skel gshadow- soundgtk-2.0 sshhal ssl hdparm.conf sudoers hesiod.conf sysctl.conf host.conf sysctl.d hostname syslog.conf hosts terminfo hosts.allow timezonehosts.deny tpvmlp.confhp ts.confifplugd ucf.confinit.d udevinitramfs-tools ufwinputrc updatedb.confiproute2 updatedb.conf.BeforeVMwareToolsInstallissue update-manager update-motd.dkbd update-notifierkernel usplash.confkernel-img.conf vimlaptop-mode vmware-toolsldap w3mld.so.cache wgetrcld.so.conf wodim.confld.so.conf.d wpa_supplicantlftp.conf X11libpaper.d xdglocale.alias xmllocaltime xulrunner-1.9logcheck zsh_command_not_foun4. adsp loop7 ram7 tty15 tty43 usbdev1.1_ep00agpgart lp0 ram8 tty16 tty44 usbdev1.1_ep81audio mapper ram9 tty17 tty45 usbdev2.1_ep00block mem random tty18 tty46 usbdev2.1_ep81bus midi rtc tty19 tty47 usbmon0cdrom1 mixer rtc0 tty2 tty48 usbmon1char net scd0 tty20 tty49 usbmon2console network_latency sda tty21 tty5 vcscore network_throughput sda1 tty22 tty50 vcs1cpu_dma_latency null sda2 tty23 tty51 vcs2disk oldmem sda5 tty24 tty52 vcs3dmmidi parport0 sequencer tty25 tty53 vcs4dsp pktcdvd sequencer2 tty26 tty54 vcs5ecryptfs port sg0 tty27 tty55 vcs6fd ppp sg1 tty28 tty56 vcs7fd0 psaux shm tty29 tty57 vcs8full ptmx snapshot tty3 tty58 vcsafuse pts snd tty30 tty59 vcsa1hpet ram0 sndstat tty31 tty6 vcsa2initctl ram1 sr0 tty32 tty60 vcsa3input ram10 stderr tty33 tty61 vcsa4kmem ram11 stdin tty34 tty62 vcsa5kmsg ram12 stdout tty35 tty63 vcsa6log ram13 tty tty36 tty7 vcsa7loop0 ram14 tty0 tty37 tty8 vcsa8loop1 ram15 tty1 tty38 tty9 vmciloop2 ram2 tty10 tty39 ttyS0 vsockloop3 ram3 tty11 tty4 ttyS1 xconsoleloop4 ram4 tty12 tty40 ttyS2 zeroloop5 ram5 tty13 tty41 ttyS3loop6 ram6 tty14 tty42 urandom区别:(二)基本操作1.用cp 将/usr/share 目录下的exercise 子目录连同目录下的文件拷贝到自己的主目录下,然后进入自己的exercise 目录:cp -r /usr/share ./.2.输入/输出重定向和cat,more 等显示命令的配合使用:a.输入cat 命令列出目录下longtext 文件中的内容;b.输入cat 命令列出目录下longtext 文件中的内容,是否发现一屏显示不完?c.使用more 命令列出longtext 的内容;d.输入cat hello.txt> hello2.txt,再输入cat hello.txt>>hello2.txt,再检查hello2.txt的内容有何变化;说明>与>>的区别。

操作系统上机实验报告

操作系统上机实验报告

课程设计(上机实验)报告课程名称:计算机操作系统学生姓名:学号:所在学院:电子与信息工程学院专业:计算机科学与技术指导教师:2011年 1 月 11 日课程设计(上机实验)报告填写说明1.本报告作为指导教师对学生课程设计(上机实验)评分的依据材料之一。

此报告应在指导教师指导下,由学生在课程设计(上机实验)结束时完成,以班为单位收齐后按时交给指导教师批阅;2.本报告内容必须用黑墨水笔工整书写或按信息学院统一设计的电子文档标准格式(可从信息学院网页上下载)打印(小4号宋体,1.5倍行距),禁止打印在其它纸上后剪贴;3.本报告中的“设计说明书”应按论文的格式成文,并直接书写(或打印)在本报告“设计说明书”栏目内。

其内容可以结合设计题目的内容和要求,根据自己在本课程设计(上机实验)阶段所完成的工作,阐明自己所采取的设计思想和方法(硬件的设计及其电原理图分析介绍,和/或软件的算法和数据结构及其主要模块介绍、程序在测试用例下的测试运行结果等)、完成本课程设计的心得体会、设计中的不足及改进设计的设想或建议等。

说明书的篇幅应不少于2000字。

4.对硬件类课程设计,应绘制或打印硬件设计图纸或实验原理图,作为设计报告的附件。

5.软件类课程设计(上机实验)的软件文档(含软件清单和程序运行的有关结果)可以单独打印成册或上传到指导教师指定计算机,作为课程设计报告的附件。

课程设计(上机实验)报告的附件是指导教师对学生课程设计(上机实验)评分的另一个依据。

课程设计(上机实验)题目:目的与任务:内容和要求:在此次实验过程中,我选择了以下几项作为实验内容:4.1 修改md命令4.2.1 修改help命令的显示方式和显示内容4.7 修改close、type等命令,允许不带文件名参数1. 改正某些缺陷2. 允许覆盖同名文件(选做内容)4.9 增加输出重定向功能(选做内容)1. type命令的输出重定向形式4.15 修改read命令,允许不带文件名参数(选做内容)课程设计(上机实习)报告4.1修改md命令命令格式:md <目录名>[ <属性>]设计思想:如果k等于2时,表示有属性参数,将参数转换为小写字母,再逐个与rh s比较,如果是则将属性与相对应的值进行或运算,如果不是则返回负值。

操作系统上机实验报告

操作系统上机实验报告

操作系统上机实验报告实验一:题目:N个进程的调度程序算法:采用最高优先数优先的调度算法和先来先服务算法具体要求:1、为每个进程建立一个进程控制块(PCB),信息包括:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等;2、进程的优先数及需要的运行时间可以事先人为地指定,进程到达时间为进程输入的时间。

进程的运行时间以时间片为单位进行计算,每个进程的状态可以是就绪 W (Wait)、运行R (Run)、或完成F (Finish)三种状态之一。

3、就绪进程获得CPU后都只能运行一个时间片,已运行时间加1来表示。

如果运行一个时间片后,进程的已运行时间已达到所需要的运行时间,则撤消该进程;如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,此时应将进程的优先数减1,然后把它插入就绪队列等待CPU。

每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。

重复以上过程,直到所要进程都完成为止主要函数功能及实现方法:1、void Pbuild()创建进程,提示要创建的进程数和输入进程PCB的有关信息。

并且每创建好一个进程都调用void Sort(),将该进程插入到就绪队列的正确位置。

2、void Sort() 将新到的进程按优先级插入就绪队列,用一链表存放就绪队列,当链表为空时,则将链表头尾指针都指向该新到的进程。

链表非空,则优先级最大者,插入队首;优先级最低的插入队尾,若需要插入到链表中间则从链表的第2项开始查找,当查到当前查找进程的优先级小于新到进程时,则将新进程插入到查找进程前面。

3、void Run()按要求3运行进程,且每运行一个时间片询问是否要加入新的进程。

4、void Display()打印进程运行信息。

链表头表示正在运行的进程,第2项以后的都是就绪队列中的内容。

主要流程图:1、void Pbuild()的流程图 main ()流程图:Sort()的流程图:Run ()的流程图:开始队列为空或者优先级 >队首? NY该进程作为队首来了一个需要出入就绪队列的进程P优先级小于队尾NY 该进程作为队尾p1,p2分别指向队首和第2项P2非空? YP 优先级>p2?NP 插入到p2前面Yp1,p2后移结束输入需创建进程的条数开始输入一进程的PCB 信息所有进程输入结束YN开始调用Pbuild()函数调用Run()函数结束主要源代码:void Pbuild() // 建立进程控制块函数 { int i,num;cout<<"\nPlease input the number of progress : "; cin>>num;for(i=0;i<num;i++) { p=getpcb(PCB); cout<<"\nInput messageofprogress"<<i<<endl;cout<<"Progress name : "; cin>>p->pname;开始就绪队列为空?结束N队首进程投入运行 时间片到,已运行时间加1需加入新进程?Y调用函数Pbuild ()运行时间到达所需时间N进程优先级减1,插入就绪队列进程完成,撤消该进程Y打印运行信息cout<<"Progress priority : ";cin>>p->prior;cout<<"Progress needtime : ";cin>>p->needt;p->runt=0;p->pstate='W'; p->arrivet=T;p->next=NULL;Sort(); //调用排序函数,将新来的进程按优先级插入就绪队列} }void Sort() //将进程按优先数从高到低排列{ PCB *p1,*p2;if(head==NULL) //若队列为空则将新到达的进程作为队首{ head=p;tail=p; head->next=NULL; tail->next=NULL;}else if((head->prior)<(p->prior)) //优先级最大者,插入队首{ p->next=head; head=p; }elseif(head->next==NULL||p->prior<=tail->prior){//优先级最低的插入队尾tail->next=p; tail=p;tail->next=NULL; }else //查找插入位置{ p1=head; p2=head->next;while(p2!=NULL) {if(p->prior>p2->prior){ p->next=p2; p1->next=p; }p1=p1->next; p2=p2->next;} } }void Run() //进程运行函数{ p=head;while(p!=NULL){ head=head->next; T++;cout<<"\n-------------------------------------------------------------";cout<<"\nThe progress being run is :"<<p->pname;p->pstate='R';cout<<"\n Name \t state \t prior\t needtime \t runtime \t arrivetime\n";cout<<p->pname<<"\t "<<p->pstate<<"\t\t"<<p->prior<<" \t\t"<<p->needt<<"\t\t"<<p->runt<<" \t\t"<<p->arrivet<<endl;Display();p->runt++;if(p->needt==p->runt) //进程完成,撤消进程 { cout<<"Progress "<<p->pname<<" is finished!\n";free(p); }else{ p->prior--; p->pstate='W';Sort();} //将该进程插入到就绪队列适当的位置printf("\n----------------------------------------------------------------");printf("\nTime up!Press 'y' to add new progress,any other key to continue……\n");char a;a=getchar();if(a=='y') Pbuild();p=head;}}运行结果:实验二:题目:设计一个请求页式存储管理方案,并编写模拟程序实现具体要求:1、产生一个需要访问的指令地址流,为不失一般性,可以适当地(用人工指定地方法或用随机数产生器)生成这个序列,使得50%的指令是顺序执行的。

计算机上机实验报告

计算机上机实验报告

一、实验目的1. 熟悉计算机操作系统的基本使用方法。

2. 掌握计算机常用软件的使用技巧。

3. 提高计算机实际操作能力,为今后的学习和工作打下基础。

二、实验时间2023年X月X日三、实验地点计算机实验室四、实验环境1. 操作系统:Windows 102. 软件环境:Microsoft Office 2016、Photoshop CC 2018、Python3.8等五、实验内容及步骤1. 实验内容一:操作系统基本操作(1)打开计算机,进入Windows 10操作系统。

(2)熟悉桌面布局,了解各个图标的作用。

(3)学习任务栏的使用,包括任务栏的显示、隐藏、调整大小等。

(4)学习窗口的基本操作,如打开、关闭、移动、调整大小等。

(5)学习文件和文件夹的基本操作,如创建、复制、移动、删除等。

2. 实验内容二:Microsoft Office 2016软件使用(1)打开Microsoft Word 2016,创建一个新的文档。

(2)学习文字的输入、编辑、格式设置等操作。

(3)学习表格的创建、编辑、格式设置等操作。

(4)学习插入图片、表格、页眉页脚等操作。

(5)保存文档,并设置文件属性。

3. 实验内容三:Photoshop CC 2018软件使用(1)打开Photoshop CC 2018,创建一个新的图像文件。

(2)学习图层的基本操作,如创建、删除、合并等。

(3)学习图像的编辑,包括裁剪、调整大小、旋转等。

(4)学习滤镜的使用,如模糊、锐化、艺术效果等。

(5)保存图像,并设置文件属性。

4. 实验内容四:Python编程基础(1)打开Python 3.8,创建一个新的Python文件。

(2)学习Python的基本语法,如变量、数据类型、运算符等。

(3)学习控制结构,包括条件语句、循环语句等。

(4)学习函数的定义和使用。

(5)保存Python文件,并运行程序。

六、实验结果与分析1. 在操作系统基本操作实验中,成功掌握了计算机的基本操作,包括桌面布局、任务栏、窗口、文件和文件夹等。

操作系统上机报告

操作系统上机报告

《操作系统上机》课程报告姓名:姜瑞班号:193151学号:_20151003756指导教师:张求明院(系):计算机学院专业:网络工程2016 年11月独立工作成果声明本人声明所呈交的《操作系统上机》报告,是我个人在导师指导下进行的程序编制工作及取得的成果。

尽我所知,除文中已经标明的引用内容,和已经标明的他人工作外,本报告未包含任何抄袭自他人的工作成果。

对本报告的工作做出贡献的个人,均已在文中以明确方式标明。

本人完全意识到本声明的法律结果由本人承担。

报告作者签名:日期:年月日实验一多级队列调度算法(1)课程设计题目:多级队列调度算法(2)程序功能及设计思路程序功能:模拟CPU在处理程序时的进程调度,使用循环轮转法和短进程优先调度的算法来完成一组请求。

设计思路:1.首先使用一个cpp文件将运行所需要的数据写入一个文件名为”1.txt”的文本文件,格式是“Pi need turn”,每组数据之间换行隔开,则可以在运行的cpp文件中得到所需要运行的内容。

2.在程序实现的过程中,按照题目所给要求从文件中读取数据,前五项按照已等待时间排序成一个循环队列(已等待时间长的放在队伍的靠前的地方),后五项按照需要运行的时间排成一个队列(运行时间短的放在队伍靠前的地方)。

然后按照实现的描述来进行数据的处理。

最后输出每一个进程运行所需要的时间。

(3)数据结构及算法设计数据结构:①结构体struct tag_pcb②队列③循环队列④文件流数据算法设计:①对于循环队列RQ1,从文件中依次读取进程的信息,根据要求形成循环队列,然后从队首开始循环,每次使用一个时间片q的长度,看该进程是否运行完成,如果在时间片以内的时间运行完成,则仅耗费所需时间,然后将该进程的运行时间存入数组中,将该进程从队列中移除,并将队列连接完好,然后使用delete删除该进程所占用的内存空间,接下来从下一个进程继续,依次循环往复,直到所有的进程均运行完成。

操作系统上机实验报告

操作系统上机实验报告

操作系统上机实验报告计算机科学与技术学院操作系统上机实验报告实验名称:进程和线程实验⽬的:理解unix/Linux下进程和线程的创建、并发执⾏过程。

实验内容:1.进程的创建2.多线程应⽤实验步骤:⼀、进程的创建下⾯这个C程序展⽰了UNIX系统中⽗进程创建⼦进程及各⾃分开活动的情况。

1、实验指导fork( )创建⼀个新进程。

系统调⽤格式:pid=fork( )参数定义:int fork( )fork( )返回值意义如下:0:在⼦进程中,pid变量保存的fork( )返回值为0,表⽰当前进程是⼦进程。

>0:在⽗进程中,pid变量保存的fork( )返回值为⼦进程的id值(进程唯⼀标识符)。

-1:创建失败。

如果fork( )调⽤成功,它向⽗进程返回⼦进程的PID,并向⼦进程返回0,即fork( )被调⽤了⼀次,但返回了两次。

此时OS在内存中建⽴⼀个新进程,所建的新进程是调⽤fork( )⽗进程(parent process)的副本,称为⼦进程(child process)。

⼦进程继承了⽗进程的许多特性,并具有与⽗进程完全相同的⽤户级上下⽂。

⽗进程与⼦进程并发执⾏。

2、参考程序代码/*process.c*/#include#includemain(int argc,char *argv[]){int pid;/* fork another process */pid = fork();if (pid < 0) { /* error occurred */fprintf(stderr, "Fork Failed");exit(-1);}else if (pid == 0) { /* child process */ execlp( "/bin/ls", "ls",NULL);}else {/* parent process *//* parent will wait for the child to complete */ wait(NULL);printf( "Child Complete" );exit(0);}}3、编译和运⾏$gcc process.c –o processs4、运⾏$./process5、思考(1)系统是怎样创建进程的?⽤fork()系统调⽤创建。

计算机操作系统上机实验报告

计算机操作系统上机实验报告

计算机操作系统上机实验报告Pcb结构体typedef struct{int ID; //进程标记号int Priority; //进程优先级int Intime; //进程进入CPU时间int Alltime; //进程运行总时间int usetime; //进程使用时间}PCB;//定义队列typedef struct QNode{PCB data;struct QNode *next;}QNode;typedef struct{QNode *front,*rear;int Length;}LinkQueue;创建队列void CreateQueue(LinkQueue &Q){…}进入队列到表尾void INQueue(LinkQueue &Q,PCB one){…}进入队列到表头void TOUQueue(LinkQueue &Q,PCB one){…}出队列PCB OUTQueue(LinkQueue &Q){…}主要实现步骤:1、小组成员共同就实验要求进行讨论,弄清进程管理的基本思想和流程,制定出具体的进度计划并分配了相关的任务。

2、小组成员各自根据要求完成任务,在此过程中任务会根据新的要求有所变化,各结构及函数等都会有相应的变化,此步骤也是完善的过程。

3、代码完成进行程序测试。

发现程序的BUG后改进程序。

4、完成实验报告的填写制作PPT。

本实验涉及的主要算法细节说明(包括数据结构)//PCB结构体typedef struct{int ID; //进程标记号int Priority; //进程优先级int Intime; //进程进入CPU时间int Alltime; //进程运行总时间int usetime; //进程使用时间}PCB;//定义队列typedef struct QNode{PCB data;struct QNode *next;}QNode;typedef struct{QNode *front,*rear;int Length;}LinkQueue;//创建队列void CreateQueue(LinkQueue &Q){Q.front=Q.rear=(QNode *)malloc(sizeof(QNode));Q.Length=0;if(!Q.front)MessageBox("分配内失败");}本实验涉及的主要算法细节说明(包括数据结构)//进入队列到表尾void INQueue(LinkQueue &Q,PCB one){QNode *p=(QNode *)malloc(sizeof(QNode)); if(!p)MessageBox("分配内失败");Q.rear->data=one;Q.rear->next=p;Q.rear=p;p->next=NULL;Q.Length++;}//进入队列到表头void TOUQueue(LinkQueue &Q,PCB one){ QNode *p=(QNode *)malloc(sizeof(QNode));if(!p)MessageBox("分配内失败");p->data=one;p->next=Q.front;Q.front=p;Q.Length++;}添加进程:时间片算法:5: 1进程进入就绪队列,进入执行队列。

操作系统上机实验报告

操作系统上机实验报告
4.输入top敲回车键来监视系统性能。
5.在主菜单里选择系统工具选择系统监视器来监视系统性能。
评语:
日期:年月日
实验五:vi的基本操作
实验目的:
1.熟悉并掌握vi命令模式、文本编辑模式和最后行模式三种工作模式之间的转换方法。
2.掌握利用vi新建和保存文件;熟悉光标的移动,文本的插入与删除等操作。
3.掌握字符串替换;行的复制、移动、撤消和删除等操作。
2.打开f2文件并显示行号。
3.在f2文件的第一行后插入如下一行内容:“With the development of
4.将文本中所有的“eyeballs”用“eye-balls”替换。
5.把第二行移动到文件的最后,删除第一和第二行并恢复删除,并不保存
6.复制第二行,并添加到文件的最后,删除第二行,保存修改后退出vi。
实验内容:
1.利用vi新建文件f2,内容为:
How to Read Faster
When I was a schoolboy I must have read every comic book ever published. But as I got older, my eyeballs must have slowed down or something I mean, comic books started to pile up faster then I could read them!
14.重复上一步操作。
15.查看刚执行过的5个命令。
实验步骤:
1.先安装VMwareWorkstation。安装后,双击图标弹出界面,在界面上单击新建虚拟机,新建一个Linux的虚拟机,按界面提示一步一步完成操作。注意:(安装过程ISO镜像操作的使用)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统上机报告实验一、匿名管道通信一、实验目的学会创建匿名管道,并且能够利用管道进行进程间的通信。

二、实验内容分别建立名为Parent的单文档应用程序和Child的单文档应用程序作为父子进程,由父进程创建一个匿名管道,实现父子进程向匿名管道写入和读取数据。

三、设计与实现过程本实验在VC6.0上实现▪ A.父进程▪先建一个Parent的单文档应用程序,增加“创建管道”“读取数据”“写入数据”三个菜单,并添加消息响应函数OnPipeCreate(),OnPipeRead(),OnPipeWrite()。

在CParentView类中增加成员变量HANDLE类型的hRead,hWrite,初始化变量,并在析构函数中释放句柄:▪void CParentView::OnPipeWrite()▪{▪if(!CreatePipe(…)) /*创建匿名管道*/▪{▪ /*显示消息“创建管道失败!”*/▪ /*退出*/▪}▪if(!CreateProcess(…)) /*创建子进程*/▪{▪ /*关闭句柄hRead、hWrite*/▪ /*显示消息“创建子进程失败!”*/▪ /*退出*/▪}▪}▪void CParentView::OnPipeRead()▪{▪ /*定义一个字符数组,用于存放读取的数据*/▪if(!ReadFile(…)) /*读取数据*/▪{▪ /*显示消息“读取数据失败!”*/▪ /*退出*/▪}▪/*打印读取的数据*/▪/*退出*/▪void CParentView::OnPipeWrite()▪{▪/*定义一个字符数组,用于存放写入的数据*/▪if(!WriteFile(…)) /*写入数据*/▪ /*显示消息“写入数据失败!”*/▪ /*退出*/▪}▪}▪ B.子进程▪建一个Child的单文档,在CChildView中增加两个成员HANDLE 型的成员变量hRead,hWrite,并添加消息响应函数OnPipeRead(),OnPipeWrite(),再添加虚函数OnInitialUpdate(),并在析构函数中释放句柄。

▪void CChildView::OnInitialUpdate()▪{▪hRead=GetStdHandle(…)/*获取标准输入句柄*/▪hWrite=GetStdHandle(…)/*获取标准输出句柄*/▪}▪void CParentView::OnPipeRead()▪{▪ /*定义一个字符数组,用于存放读取的数据*/▪if(!ReadFile(…)) /*读取数据*/▪{▪ /*显示消息“读取数据失败!”*/▪ /*退出*/▪}▪/*打印读取的数据*/▪/*退出*/▪}▪void CParentView::OnPipeWrite()▪{▪/*定义一个字符数组,用于存放写入的数据*/▪if(!WriteFile(…)) /*写入数据*/▪{▪ /*显示消息“写入数据失败!”*/▪ /*退出*/▪}#######################父进程代码####################### void CFatherView::OnPipeCreate(){// TODO: Add your command handler code hereSECURITY_ATTRIBUTES sa;sa.bInheritHandle=TRUE;sa.lpSecurityDescriptor=NULL;sa.nLength=sizeof(SECURITY_ATTRIBUTES);if(!CreatePipe(&hRead,&hWrite,&sa,0)){MessageBox("创建管道失败!");return;}STARTUPINFO sui;PROCESS_INFORMATION pi;ZeroMemory(&sui,sizeof(STARTUPINFO));//将数据清零sui.cb=sizeof(STARTUPINFO);sui.dwFlags=STARTF_USESTDHANDLES;sui.hStdInput=hRead;sui.hStdOutput=hWrite;sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);if(!CreateProcess("H:\\OS作业\\Experiment1_匿名管道通信\\Child\\Debug\\child.exe",NULL,NULL,NULL,TRUE,0,NULL,NU LL,&sui,&pi)){CloseHandle(hRead);CloseHandle(hWrite);//关闭句柄,将内核对象的使用计数减1,这样当操作系统发现内核对象//的使用计数为0时,将清除内核对象。

hRead=NULL;hWrite=NULL;MessageBox("创建子进程失败!");—return;}else{CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}}void CFatherView::OnRead(){// TODO: Add your command handler code herechar buf[100];DWORD dwRead;if(!ReadFile(hRead,buf,100,&dwRead,NULL)){MessageBox("读取数据失败!");return;}MessageBox(buf);}void CFatherView::OnInput(){// TODO: Add your command handler code herechar buf[]="你好,我是父进程!";DWORD dwWrite;if(!WriteFile(hWrite,buf,strlen(buf)+1,&dwWrite,NULL)) {MessageBox("写入数据失败!");return;}}#######################子进程代码####################### void CChildView::OnInput(){// TODO: Add your command handler code herechar buf[100];DWORD dwRead;if(!ReadFile(hRead,buf,100,&dwRead,NULL)){MessageBox("读取数据失败!");return;}MessageBox(buf);}void CChildView::OnWrite(){// TODO: Add your command handler code herechar buf[]="匿名管道测试程序";DWORD dwWrite;if(!WriteFile(hWrite,buf,strlen(buf)+1,&dwWrite,NULL)) {MessageBox("写入数据失败!");return;}}void CChildView::OnInitialUpdate(){CView::OnInitialUpdate();// TODO: Add your specialized code here and/or call the base classhRead=GetStdHandle(STD_INPUT_HANDLE);hWrite=GetStdHandle(STD_OUTPUT_HANDLE);}四、执行结果与分析创建管道:父进程向子进程发送信息:子进程向父进程发送信息:五、思考与收获这是第一次上机实验,本来没有学过C++,只有C的编程基础,初接触MFC,觉得编程十分吃力,经过辅导老师多次耐心的演示,和指导着做,终于能够自己按流程走一遍。

感觉很有收获,主要是这些课上学到的知识,在生活中很难接触到,通过上机让我真正的能够用代码来操纵计算机的操作系统去工作,减少了理论与实践的差距,让我觉得课堂不再枯燥和空洞。

这次实验让我对管道这种进程间的通信方法有了很直观的感受,通过人机交互的方式,手动地在进程间选择发送和接受数据,强化了对管道通信特点(连接于两个进程之间,以先进先出的方式实现消息的单向传送)的认识。

实验二、创建进程一、实验目的学会通过基本的Windows或者Linux进程控制函数,由父进程创建子进程,并实现父子进程协同工作。

二、实验内容创建两个进程,让子进程读取一个文件,父进程等待子进程读取完文件后继续执行,实现进程协同工作。

进程协同工作就是协调好两个进程,使之安排好先后次序并以此执行,可以用等待函数来实现这一点。

当需要等待子进程运行结束时,可在父进程中调用等待函数。

假设现在有这样的一个工作,需要计算1——100的和,还需要做一个工作是读写文件。

我们可以让父进程计算,创建一个子进程实现读写文件。

三、设计与实现过程主要工作:❝1、首先由父进程创建子进程❝2、让子进程创建一个文件并写入数据,子进程写文件过程中,父进程继续执行计算工作❝3、等子进程执行完以后,父进程读取文件内容输出,实现进程协同工作。

父进程框架❝void main()❝{❝//为创建进程做准备工作❝//创建子进程❝If(创建失败)❝返回❝Else(创建成功)❝//执行计算1——100的和❝//等子进程执行完,读取子进程的文件内容,并输出。

❝}子进程框架❝void main()❝{❝//创建文件❝If(失败)❝返回❝Else(成功)❝//向文件写入数据❝//读取文件内容输出❝}######################父进程代码######################int main(){int i;int sum=0;char Read[100]="";PROCESS_INFORMATION pi;STARTUPINFO sui; //创建进程的准备工作ZeroMemory(&sui,sizeof(sui));sui.cb=sizeof(STARTUPINFO);if(!CreateProcess("H:\\OS作业\\Experiment2_创建进程\\Child\\Debug\\child.exe",NULL,NULL,NULL,FALSE,CREATE_NEW_ CONSOLE,NULL,NULL,&sui,&pi))return 0;else //创建成功//父进程继续执行for(i=1;i<=100;i++){sum+=i;Sleep(10);printf("sum=%d\n",sum);}WaitForSingleObject(pi.hProcess,INFINITE);FILE *pfile1=fopen("H:\\OS作业\\Experiment2_创建进程\\kang.txt","r");fread(Read,sizeof(char),100,pfile1); //fread 第二个参数是每个字符的大小//文件打开方式需改为可读写fclose(pfile1);printf("%s\n",Read);return 0;}######################子进程代码######################int main(){char *Contents="You've made it,aha!\n";char Read[100]="";for(int i=0;i<100;i++){printf("%s",Read+i);}FILE *pfile=fopen("H:\\OS作业\\Experiment2_创建进程\\kang.txt","w+");if(NULL==pfile) //地址双斜线return 0;elseprintf("创建文件文件成功\n");Sleep(500);fwrite(Contents,strlen(Contents),1,pfile);fwrite("You're great!",strlen("You'regreat!"),1,pfile);fclose(pfile);printf("文件成功写入\n");Sleep(500);FILE *pfile1=fopen("H:\\OS作业\\Experiment2_创建进程\\kang.txt","r");fread(Read,sizeof(char),strlen(Contents)+strlen("You're great!"),pfile1); //fread 第二个参数是每个字符的大小 //文件打开方式需改为可读写fclose(pfile1);printf("%s\n",Read);return 0;}四、执行结果与分析父进程执行结果:子进程执行结果:五、思考与收获这次实验通过学习使用windows下的进程创建函数,能够自己创建进程并让两个进程同时工作,并通过等待函数实现两进程的同步。

相关文档
最新文档