用户管理和进程管理实验报告

时间:2024.3.27

一、目的(本次实验所涉及并要求掌握的知识点)

1、掌握和学会Linux的用户管理

2、掌握和学会Linux的进程管理

    

二、实验内容与设计思想(设计思路、主要数据结构、主要代码结构、主要代码段分析、电路图)

实验内容

1)创建1个用户登录脚本的模板,命名为/etc/skel-net,在skel-net中创建一文件名为“网络用户须知”,创建用户net09用skel-net的模板,创建完毕到这该用户家目录中检查是否有“网络用户须知”文件。

2)先设置当前日期为20##年11月14日,用命令修改net09用户,设置最小口令时间为2天,最长口令时间为7天,口令失效前3天警告,20##年11月16日帐号被禁用。

3)用命令修改用户的默认属性,设置家目录为/home/ttt,默认shell为csh。查看useradd文件是否生效了,然后改回原来的状态。

4)设置用户net09默认创建文件的权限为600,创建一个空文件,检查权限是否正确。

5)实现ftp后台自动下载的方式下载ftp://210.34.148.138/常用软件/光盘映象/VC++.iso(即:注销用户后,系统仍然继续下载指定文件)

6)填写实验报告单,下周实验课(11月28日)前传到服务器上,实验报告单的文件名格式为“11.14-11.21-xxx实验报告”,xxx为自己的名字

三、实验使用环境(本次实验所使用的平台和相关软件)

VMware、Red Hat Enterprise Linux 5

   

四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)

1、创建1个用户登录脚本的模板,命名为/etc/skel-net,在skel-net中创建一文件名为“网络用户须知”,创建用户net09用skel-net的模板,创建完毕到这该用户家目录中检查是否有“网络用户须知”文件。

2、先设置当前日期为20##年11月14日,用命令修改net09用户,设置最小口令时间为2天,最长口令时间为7天,口令失效前3天警告,20##年11月16日帐号被禁用。

用命令more /etc/shadow 查看

   

3、用命令修改用户的默认属性,设置家目录为/home/ttt,默认shell为csh。查看useradd文件是否生效了,然后改回原来的状态。

首先,查看原来用户的默认属性

然后,用useradd命令设置家目录为/home/ttt,默认shell为csh,并查看

最后,改回原来的状态并查看

4、设置用户net09默认创建文件的权限为600,创建一个空文件,检查权限是否正确。

从控制台登录用户net09,用umask命令设置文件的权限,创建空文件zay,检查权限是否正确

超级用户root 创建的文件的权限没有改变

5、实现ftp后台自动下载的方式下载ftp://210.34.148.138/常用软件/光盘映象/VC++.iso(即:注销用户后,系统仍然继续下载指定文件)

用命令nohup command &从ftp后台自动下载的方式下载ftp://210.34.148.138/常用软件/光盘映象/VC++.iso

     用ps –ef 查看所有进程

     注销root用户后重新登录,查后进程

    

进程号6105已完成,用ls命令查看VC++.iso,已下载完成

五、实验小结(实验中遇到的问题及解决过程、实验中产生的错误及原因分析、实验体会和收获)

1、用useradd命令增加用户时,要指定用户模板目录用命令“useradd –k skel_dir 用户名”是不可行,后来上网查看useradd所有选项的具体用法知道命令“useradd [-m [-k skeleton_dir] 用户名”才可以;因为创建新用户时用户家目录不存在,用选项[-m]会在用户家目录不在则自动创建。

2、设置用户创建文件的权限时,用户可以用户环境文件重新设置,但我试过还是没成功,望老师可以在讲解一下。

   

六、附录(参考文献和相关资料)


第二篇:进程管理实验报告昆工


昆明理工大学信息工程与自动化学院学生实验报告

20## 2012  学年  学期

课程名称:操作系统                 开课实验室:444        2012 年  4 月 10  日

一、实验目的

通过编写进程管理的算法,要求学生掌握整个进程管理的各个环节,进程的数据结构描述,进程的各种状态之间的转换,以及进程的调度算法。以加深对进程的概念及进程调度算法的理解,并且提高链表的应用能力,达到提高编程能力的目的。

二、实验原理及基本技术路线图(方框原理图)

用C语言或C++语言开发。需要定义PCB的数据结构,用链表的形式管理进程,采用多级反馈队列调度的算法模拟进程的控制。要求有创建、撤销、调度、阻塞、唤醒进程等功能。

状态转换图:

 

各原语的功能说明:

#include<stdio.h>标准输入输出头文件

#include<stdlib.h> stdlib.h里面定义了五种类型、一些宏和通用工具函数。 类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。

多级反馈队列调度算法的描述:

void zhingxing()

{

for(int i=0;i<=链表的数目;)

 {

                p=rq(i),front;

while(p!=NULL)

{

执行调度算法,将在时间片内不能完成的进程,插入到下一队列的尾部,并以此循环执行。

                  p=p->next;

}

           }

}

程序功能结构图:

 

流程图:

creat()流程图:

 

数据结构定义主要变量的说明:

xuhao进程的序号

daoda进程到达时间

   pid[10]    进程名字

   youxian    进程优先级

   yunxingsuoxu  运行所需时间

   yunxing运行已用时间

zhuangtai   R表示执行,W表示动态就绪 ,F表示完成

函数的说明:

void creat();//创建链表

void diaodu();//执行调度的过程

void display();//显示执行结果

三、所用仪器、材料(设备名称、型号、规格等)。

计算机一台

四、实验方法、步骤

#include<stdio.h>

#include<stdlib.h>

#define NULL 0

int shumu;

void creat();//创建链表

void diaodu();//执行调度

void display();//显示执行结果

//进程PCB结构体

struct jincheng

{

   int xuhao;

   int daoda;

   char pid[10];                 //进程名字

   int youxian;             //进程优先级

   int yunxingsuoxu;          //占用cpu时间

   int yunxing; 

char zhuangtai;          //R表示执行,W表示动态就绪 ,F表示完成

   struct jincheng *next;

};

//链表结构体

typedef struct node

{

  jincheng *front;

}pcbqueue;

pcbqueue rq[3];//定义三个等待队列

struct jincheng *p,*q;

//创建进程……

void creat()

   printf("创建进程数目;(不大于20):");

      scanf("%d",&shumu);

   if(shumu>20)

   {

      printf("内存已满!\n");

      printf("输入错误,请重新创建进程!\n");

      creat();

   }

      else

          {

             for(int j=0;j<shumu;j++)

                           {                                                     p=(jincheng*)malloc(sizeof(jincheng));

                    p->youxian=(int)(rand()%(4-1)+1);

                                                                      if(rq[p->youxian-1].front==NULL)//建立队列2,1,0

                        {

                               printf("请输入新进程的序号(数字):\n");

                           scanf("%d",&p->xuhao);

                            printf("请输入新进程的名字:\n");

                           scanf("%s",&p->pid);

                           p->daoda=(int)(rand()%(5-1)+1);

                           p->yunxingsuoxu=(int)(rand()%(5-1)+1);

                           p->yunxing=0;

                           p->zhuangtai='W';  //新建进程的状态设置为“就绪”

                           rq[p->youxian-1].front=p;

                           p->next=NULL;

                                      }

                           else                  //如果就绪队列不是空队列

                               {

                                  p=rq[p->youxian-1].front;

                                  while(p->next!=NULL)

                                  {

                                      p=p->next; //p一直指向就绪队列的队尾

                                  }

                                   q=(jincheng*)malloc(sizeof(jincheng));

                                  q->next=p->next;

                           p->next=q; //在就绪队列的队尾加入新建的进程

                               printf("请输入新进程的序号(数字):\n");

                                  scanf("%d",&q->xuhao);

                                  printf("请输入新进程的名字:\n");

                                  scanf("%s",&q->pid);

                                    q->daoda=(int)(rand()%(5-1)+1);

                                  q->yunxing=0;

                                  q->yunxingsuoxu=(int)(rand()%(5-1)+1);

                                  q->zhuangtai='W';

                                                              }

                               }

          }

   if(shumu>0&&shumu<=20)

   {

        printf("\t\t\t进程创建成功!\n");

       printf("\t***********************************************\n");

       printf("\t*********************执行程序******************\n");

       printf("\t***********************************************\n");

   }

}

void diaodu()//执行部分

   display(); 

   printf("正在执行进程运行情况:\n");

   printf("序号    名字   运行时间    已运行时间  到达时间  状态\n");

   int i=2;//从第二个队列开始……

   for(i=2;i>=0;i--)

   {

      p=rq[i].front;

      while(p!=NULL)

      {

          for(int j=1;j<=2*(3-i);j++)

          {

             p->yunxing=p->yunxing+1;

             p->yunxingsuoxu=p->yunxingsuoxu-1;

             if(p->yunxingsuoxu<0)

             {

                 printf("进程已完成运行……\n");

                 exit(0);

             }

             p->zhuangtai='R';//执行过程中状态改变

             if(p->yunxingsuoxu==0)

             {

                 p->zhuangtai='F'; //执行结束状态改变

                 printf("%d         %s          %d        %d     %d      %c\n",p->xuhao,p->pid,p->yunxingsuoxu,p->yunxing,p->daoda,p->zhuangtai);

                 break;

             }

                           getchar();

                           printf("%d         %s          %d        %d     %d      %c\n",p->xuhao,p->pid,p->yunxingsuoxu,p->yunxing,p->daoda,p->zhuangtai);

                    }

             if(p->yunxingsuoxu>0)

             {

             p->zhuangtai='W';

             getchar();

             printf("%d         %s          %d        %d     %d      %c\n",p->xuhao,p->pid,p->yunxingsuoxu,p->yunxing,p->daoda,p->zhuangtai);

if(i-1<=0)                 /*将用玩时间片的插入相应队列,以下作此操作*/

                {  

                    q=rq[0].front;

                    while(q->next!=NULL)

                    {

                        q=q->next;

                    }

                        q->next=p;

                        rq[i].front=p->next;

                        p->next=NULL;

                        diaodu();

                 }

                 else

                    {

                    q=rq[i-1].front;

                        while(q->next!=NULL)

                        {

                           q=q->next;

                        }

                        q->next=p;

                        rq[i].front=p->next;

                        p->next=NULL;

                        diaodu();               

                    }

             diaodu();

             getchar();

             printf("%d         %s          %d        %d     %d      %c\n",p->xuhao,p->pid,p->yunxingsuoxu,p->yunxing,p->daoda,p->zhuangtai);

             }

             p=p->next;

      }

   }

}

void display()//输出部分

{

   printf("所有进程运行情况:\n");

   printf("序号    名字   运行时间    已运行时间  到达时间  状态\n");

   for(int a=0;a<3;a++)

   {

      p=rq[a].front;

      while(p!=NULL)

      {  

          printf("%d         %s          %d             %d            %d         %c\n",p->xuhao,p->pid,p->yunxingsuoxu,p->yunxing,p->daoda,p->zhuangtai);

          p=p->next;

      }

   }

}

void main()

{

 creat();

 diaodu();

 display();

}

五、实验过程原始记录:

输入数据:

序号                名称

1                    a

2                    b

3                    d

4                    e

5                    f

运行截图:

输入进程:

未完成进程插入下一进程:

过程及结果:

六、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲线图时必须用计算纸)

这次操作系统进程管理课程设计,在编写过程中,遇到很多难题,特别是在操作系统实验中不曾注意到的问题,也有许多新的问题,在实际反复调试运行中,不断加深了对操作系统的理解,也很大地程度上提高了编程的能力,由于对重要概念的把握程度还不够深入,在实际理解编写时遇到很多不该发生的问题。不过,都很好的解决并牢牢地掌握住了。尤其是链表的插入,哪里插到哪里,要在草稿纸上理清思路,不然会出错,就像那天一个字母大写了,整了半天才检查出来,做程序要非常的细心。做多了你就会发现其实都是大同小异,稍微感动一点就可以了,计算机方面的知识,永不懈怠。有什么问题就问老师,要把它搞清楚来龙气脉,这样才会有提高。

通过这次进程管理课程设计,不仅让我了解了多级反馈队列的进程管理系统,更重要的还让我学会了、或者说是验证了“做事一定要有次序和对事物的总体把握”这句话。这次操作系统实习,不仅让我对操作系统这门课程有了更深入的研究、对很多重要的概念有了巩固和掌握,还给了我今后做事的启示。做事要塌实,不能想着一步登天,要有计划,有目的的进行做事。盲目真的不应该再在我们身上出现了,我们应该认真找到自己的缺点并且及时改正。在这里,我和赵安君很感谢杨老师的指导,多亏她的指导我和赵安君才能完成,

她耐心的指导才有我们的进步,杨老师真的是一位好老师。

If you put your heart into it,nothing is difficult !!!!!!!!!!!!

更多相关推荐:
操作系统实验报告 实验一 进程管理

实验一进程管理一目的进程调度是处理机管理的核心内容本实验要求编写和调试一个简单的进程调度程序通过本实验加深理解有关进程控制块进程队列的概念并体会和了解进程调度算法的具体实施办法二实验内容及要求1设计进程控制块P...

操作系统-实验报告-进程管理实验

一、实验目的本实验要求学生编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁的发生。二、实验题目第一题:用银行家算法实现资源分配。要求:(1)设计一个3个并…

进程管理实验报告源代码

实验一进程管理1目的和要求通过实验理解进程的概念进程的组成PCB结构进程的并发执行和操作系统进行进程管理的相关原语主要是进程的创建执行撤消2实验内容用C语言编程模拟进程管理至少要有创建新的进程查看运行进程换出某...

北邮大三上-操作系统-进程管理实验报告

操作系统实验一进程管理实验班级20xx211311学号姓名schnee目录1234实验目的3实验预备内容3环境说明3实验内容441进程的创建4程序1411题目要求4412程序设计说明4413源代码4414运行结...

进程管理实验报告

北方工业大学北方工业大学20xx513第2页共9页北方工业大学20xx513第3页共9页北方工业大学20xx513第4页共9页北方工业大学20xx513第5页共9页北方工业大学20xx513第6页共9页北方工业...

进程管理实验报告

软件学院计算机课程实验报告册课程名称计算机操作系统实验学期20xx年至20xx年第2学期学生所在院系软件学院年级11软件专业班级软工1班学生姓名朱水云学号1115114034指导教师陈自刚实验最终成绩软件学院实...

操作系统原理与Linux_进程管理实验报告

计算机科学与技术系实验报告实验名称班级计算机082学号08034050217姓名XXXX20xx年03月23日实验二进程管理一实验目的1加深对进程概念的理解明确进程和程序的区别2进一步认识并发执行的实质3分析进...

北邮操作系统进程管理实验报告及源代码

进程管理实验报告1实验目的1加深对进程概念的理解明确进程和程序的区别2进一步认识并发执行的实质3分析进程争用资源的现象学习解决进程互斥的方法4了解Linux系统中进程通信的基本原理2实验预备内容1阅读Linux...

操作系统-进程管理与进程同步-实验报告

实验一进程管理与进程同步一实验目的了解进程管理的实现方法理解和掌握处理进程同步问题的方法二实验内容实现银行家算法进程调度过程的模拟读者写者问题的写者优先算法实验步骤理解安全性算法和银行家算法的核心机制针对3类资...

linux进程线程管理实验报告

西安郵電學院操作系统LINUX实验报告题题题系部名称专业名称班级学号学生姓名时间目1进程目2线程管理目3互斥计算机学院实验一进程管理一实验目的通过观察分析实验现象深入理解进程及进程在调度执行和内存空间等方面的特...

实验一 进程管理

实验一进程管理1实验目的加深对进程概念的理解明确进程和程序的区别进一步认识并发执行的实质分析进程争用资源的现象学习解决进程互斥的方法了解Linux系统中进程通信的基本原理2实验准备阅读Linux的schedh源...

计算机操作系统进程管理实验

进程调度实验实验目的设计一个有N个进程并行的进程调度程序实验要求要求学生熟练掌握最高优先级优先的进程调度算法并使用C语言编写程序模拟若干个进程的进程调度过程重点与难点重点掌握最高优先级优先的进程调度算法难点用C...

进程管理实验报告(23篇)