开源操作系统课程设计

本次课程设计涉及多个实验,包括使用GCC编写螺旋矩阵、Shell脚本编程、Linux内核和驱动开发、进程与线程操作等。通过实验,深化了对Linux操作系统的理解,掌握了在终端使用vi编辑器、gcc编译器、shell脚本编写以及内核模块和系统调用的创建。此外,还学习了如何使用ncurses进行图形界面设计,并在实践中理解了操作系统概念,如进程间通信、内存管理和设备驱动。实验增强了对Linux指令和系统调用的认识,同时也提高了Linux环境下编程和调试技能。
摘要由CSDN通过智能技术生成

 

开源操作系统课程设计

实验报告

GCC —— Matrix

SHELL Footscript

Ncurse —— menu

Kernel FloppyLinux

Driver Node & test

Process fork & pipe

Pthread PV operate

Pthread Philosophy

System Call

SHELL simulation

Memory simulation

Aggregate

 

 

 

 

 

 

 

 

 

 

 

 

 

评语

 

 
  • 界面以及结构说明(程序界面菜单以及子菜单的截图和功能说明)

1、GCC Matrix

编译执行打印螺旋矩阵

2、SHELL Footscript

编写脚本,实现添加和删除用户功能

3、Kernel FloppyLinux

制作FloppyLinux

4、Driver Node & test

执行驱动,打印螺旋矩阵

5、Process fork & pipe

实现进程的fork()和进程的pipe()

6、Pthread PV operate

用进程实现警察和小偷

7、Pthread Philosophy

用进程实现哲学家问题

8、System Call

系统调用

9、SHELL simulation

模拟实现shell的命令

10、Memory simulation

用首次适应算法实现内存管理

 

  • 各个模块说明

1、GCC —— Matrix

(1)实验原理

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。

vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器。他是我们使用Linux系统不能缺少的工具。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,学会它后,您将在Linux的世界里畅行无阻。vim 具有程序编辑的能力,可以以字体颜色辨别语法的正确性,方便程序设计;因为程序简单,编辑速度相当快速。vim可以当作vi的升级版本,他可以用多种颜色的方式来显示一些特殊的信息。vim会依据文件扩展名或者是文件内的开头信息, 判断该文件的内容而自动的执行该程序的语法判断式,再以颜色来显示程序代码与一般信息。vim里面加入了很多额外的功能,例如支持正则表达式的搜索、多文件编辑、块复制等等。 这对于我们在Linux上进行一些配置文件的修改工作时是很棒的功能。

本次实验在小红帽里写一个简单的C文件,编译运行,打印螺旋矩阵。通过本次实验,熟悉Linux中的命令,学会在终端中通过vi编译器中,编写简单的程序。

(2)实验关键代码

// 输出螺旋矩阵

void Matrix()

{

    const int size = 10; // 矩阵大小

    int matrix[size][size] = {0};

    int row = 0;

    int col = 0;

    int start = 1; // 起始值

    int temp = size;

    for (int count = 0; count < size / 2; count++) // size阶的矩阵可以画size/2个圈

    {

        for (; col < temp - 1; col++) // a排赋值

            matrix[row][col] = start++;

        for (; row < temp - 1; row++) // b排赋值

            matrix[row][col] = start++;

        for (col = temp - 1; col > count; col--) // c排赋值

            matrix[row][col] = start++;

        for (row = temp - 1; row > count; row--) // d排赋值

            matrix[row][col] = start++;

        // 进入下一圈

        temp--;

        row++;

        start -= 1; // 这里-1是因为在换圈的时候会多加1

    }

    if (0 != size % 2) // 如果size为奇数则最后会有一个数遍历不到,这里补上

    matrix[row][col+1] = start + 1;

    // 输出数组

    for (int i = 0; i < size; i++)

    {

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

        {

            printf("  %d",matrix[i][j]);

        }

        printf("\n");

    }

}

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Requirements 1. Simulate a Unix file system on your Windows Platform 2. Understand the file system on Unix system, and the usage of i-nodes 3. Implement the function of sub-directory 4. The task needs to be completed using C++ or C 5. Tasks/Functionalities The following functions are required in your file system: 1. Allocate 16MB space in memory as the storage for your file system. The space is divided as blocks with block size 1KB Assume block address length is 32-bit; Design the information contained in i-node The i-node should support up to 10 direct block addresses The i-node should support at least one indirect block address 2. The fist block is used for storing the i-node for the root directory(/). While your program is lunched, two directories (/dir1 and / dir1/dir2) should be created, and also two files need to be written as /dir1/file1 and /dir1/dir2/file2 (5 marks) 3. File 1 and 2 contain the message of “This is file 1.” and “This is file2”. 4. Following commands should be supported in your system: a) Create a file:createFile fileName fileSize (10 marks) i.e.:createFile /dir1/myFile 1024 (in bytes) if fileSiz > max file size, print out an error message. The file content is filled up with filename + repeated digits from 0 - 9 i.e.: “myFile012345678901234567890123….” b) Delete a file:deleteFile filename (10 marks) i.e.:deleteFile /dir1/myFile c) Create a directory:createDir (5 marks) i.e.:createDir /dir1/sub1 d) Delete a directory:deleteDir (5 marks) i.e.: deleteDir /dir1/sub1 (The current working directory is not allowed to be deleted) e) Change current working direcotry:changeDir (5 marks) i.e.: changeDir /dir2 f) List all the files and sub-directories under current working directory:dir (5 marks) You also need to list at least two file attributes. (i.e. file size, time created, etc.) g) Copy a file : cp (5 marks) i.e.: file1 file2 h) Display the usage of storage space:sum (10 marks) Display the usage of the 16MB
一、设计要求 设计一个模拟仿真“生产者-消费者”问题的解决过程及方法的程序。 主要内容是P、V操作过程的设计与实现。生产消费者问题是操作系统设计中经常遇到的问题。多个生产者和消费者线程访问在共享内存中的环形缓冲。生产者生产产品并将它放入环形缓冲,同时消费者从缓冲中取出产品并消费。当缓冲区满时生产者阻塞并且当缓冲区有空时生产者又重新工作。类似的,消费者当缓冲区空时阻塞并且当缓冲区有产品时又重新工作。显然,生产者和消费者需要一种同步机制以协调它们的工作。 二、系统功能 本程序模拟实现了“生产者-消费者”问题的解决过程,用图形界面动态演示了P、V操作过程以及生产者、消费者进程之间的工作流程。 本程序使用的算法是典型的P、V操作使用信号量解决“生产者-消费者”问题。 本程序在界面上使用了Java的swing接口函数,用矩形条表示生产者进程中待生产的产品,并设置了三个分区分别表示生产者进程待生产的产品、公共缓冲池中已生产的产品和消费者进程已消费的产品,以动画的效果动态演示了待生产产品变成消费者进程中已消费产品的过程,以及在这一过程中生产者进程和消费者进程协调工作的过程。在程序运行过程中使用了两个生产者线程和两个消费者线程并发工作,并使用了线程随机休眠的策略,即每个线程在完成一次生产过程或消费过程后随机休眠1至10秒钟。这一策略能保证生产者和消费者之间的运行顺序被打破,从而产生生产产品和消费产品之间的矛盾(即没有产品可消费的情况下消费者试图向公共缓冲池取产品消费、公共缓冲池里的产品已满的情况下生产者试图生产产品放入缓冲池)。因为生产者生产产品和消费者消费产品都是随机的,所以产生的矛盾也是不可预知的,在这种情况下,才能检验所使用的算法是否健壮高效。而本程序正是基于这种思想设计出来的,用来模拟生产者消费者问题的解决过程。 本程序在运行时提供友好的交互界面,且操作简单,在模拟过程中各种情况有相应文字提示,并伴有相应的图像变化,如:当没有产品可消费的情况下消费者试图向公共缓冲池取产品消费,消费者进程阻塞,公共缓冲池随之变成红色,文字提示框内显示warning: it's empty!Consumer is block;当缓冲池已满而生产者试图生产产品并向缓冲池放入产品时,生产者进程阻塞,公共缓冲池里的每一个产品变成黄色,问题提示框显示warning: it's full!Producer is block。整个模拟过程通俗易懂,利于理解,能很好的帮助使用者加强生产者消费者问题的理解。
开源操作系统 应用实习报告 一、统计日志大小 假如我们需要每小时都去执行你写的脚本。在脚本中实现这样的功能,当时间是0点和12点时,需要将目录/data/log/下的文件全部清空,注意只能清空文件内容而不能删除文件。而其他时间只需要统计一下每个文件的大小,一个文件一行,输出到一个按日期和时间为名字的日志里。 需要考虑/data/log/目录下的二级、三级、… 等子目录里面的文件。 二、监控磁盘使用率 写一个Shell脚本,检测所有磁盘分区使用率和inode使用率并记录到以当天日期为命名的日志文件里,当发现某个分区容量或者inode使用量大于85%时,发邮件通知你自己。 思路:就是先df -h 然后过滤出已使用的那一列,然后再想办法过滤出百分比的整数部分,然后和85去比较,同理,inode也是一样的思路。 1.df -h、df -i 记录磁盘分区使用率和inode使用率,date +%F 日志名格式 2.取出使用率(第5列)百分比序列,for循环逐一与85比较,大于85则记录到新文件里,当for循环结束后,汇总超过85的一并发送邮件(邮箱服务因未搭建,发送本地root账户)。 三、统计网卡流量 写一个脚本,检测你的网络流量,并记录到一个日志里。并且一分钟统计一次(只需要统计外网网卡,假设网卡名字为eth0)。 四、判断是否开启80端口 写一个脚本判断你的Linux服务器里是否开启web服务?(监听80端口)如果开启了,请判断出跑的是什么服务,是阿帕奇呢还是nginx又或者是其他的什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值