Nachos-3.4 系统调用 实现Create Open Read Write Close

本文主要介绍了Nachos-3.4系统调用的实现,包括系统调用的整个过程,源码结构,以及Create, Open, Read, Write, Close这五个系统调用函数的具体实现。详细讲解了如何在Nachos环境下编译用户程序,以及如何修改源代码以实现特定功能。" 50734158,5539553,Java GUI:双按钮事件监听与处理机制,"['java', 'swing', 'GUI设计', '事件监听']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

Nachos-3.4 系统调用 实现Create Open Read Write Close

**
我使用的是32位,ubuntu16.04 虚拟机是VMware Nachos是3.4版本的

[简要说明]

本学期的实验课重点来了,就是关于nachos的实验。上上个星期,我开始接触到Nachos ,准确的说是Nachos-4.1。其实我大部分时间都是花在搭建Nachou-4.1的工作上,大概花了两周,都没搭好。我最开始是在ubuntu上搭建的,之后又在red hat linux 上搭建。然后又是ubuntu 这个过程真的有点想吐。还好最后将Nachos-4.1和Nachos-3.4的安装都弄好了,不过最近太忙了,但是我想之后还是会写一篇文章的吧,相信之后会有无数的学弟学妹们,走在被Nachos坑的路上。
好,进入正题。今天主要是讲Nachos-3.4的系统调用。
我将从三个方面来讲
1. Nachos-3.4系统调用的整个过程
2. 分析系统调用过程,我们修改内容步骤介绍
3. Create,Open,Write,Read,Close这五个系统调用函数的实现

1. Nachos-3.4系统调用的整个过程

1. Nachos-3.4源码的结构

Nachos-3.4-code
如上图所示:Nachos-3.4 code 文件夹下内容,我将其大致分为三部分

  1. bin:
    通过交叉编译器将主机运行的程序转换为Nachos用户态可运行的程序(出现coff2noff文件)
    注意:我们知道Nachos实际上是相当与一个虚拟机,我们通过 nachos -x uerprogram 这样的命令来运行用户写的程序,用户写出来的.c文件只用通过交叉编译器mips以及这个bin文件下内程序转换为coff2noff文件才能在nachos下运行。

  2. nachos核心部分:
    filesys:文件系统管理
    machine:模拟机器硬件
    network:网络系统管理
    threads:内核线程管理
    vm:虚拟内存

  3. 与用户相关:
    test:用户态程序
    userprog:用户程序管理
    注意:下面的Makefile主要是用于nachos整体编译安装

2. Nachos-3.4运行用户态程序和目录结构间的关系

用户态程序目录结构
如上图,可以将自己写的程序和nachos分开,分为三步:

  1. 首先你在/nachos-3.4/code/这个路径下通过make 将nachos整体编译,此时nachos相当于准备好了,它是一个虚拟机
  2. 其次你在/nachos-3.4/code/test 这个目录下编写自己的.c文件,修改Makefile,然后make(这个过程会调用mips) 生成一个coff2noff文件
  3. 最后通过在/nachos-3.4/code/test这个路径下 让准备好的nachos 和准备好的用户程序结合起来,也就是用户程序开始调用系统,nachos为用户程序提供支持~~

    **整个过程中使用的指令: /nachos-3.4/code/下 make
    /nachos-3.4/code/test 下 编写your.c(举个栗子) 文件 ,修改Makefile,make
    /nachos-3.4/code/test下 ../userprog/nachos -x your (-x指运行用户程序)**

3. Nachos-3.4系统调用过程中调用的函数

这个部分有一定难度,一定是要参考Nachos-3.4的源代码看才行

//以下是函数出现的线性顺序
main.cc                        //nachos整个程序的入口 
startProcess()                //根据-x 知道是要运行用户程序,由此调用此函数(在main.cc中)
machine->run()                 //StartProcess函数将可执行文件加载到地址空间后,交给当前执行线程进行处理。调用machine->Run()函数。
OneInstruction()
/*Run函数模拟了CPU的执行过程,每次执行一条指令。然后时钟向前并等待下次中断。执行指令函数为OneInstruction(machine目录下mipssim.cc中)。每一条指令是一个Instruction类,该类定义在machine.h中。Instruction类中有两个重要的参数:opCode和一个寄存器。*/
RaiseException()              //在OneInstruction函数中,当操作指令为OP_SYSCALL时会使用RaiseException函数触发中断。
interrupt->setStatus(SystemMode)将系统切换到内核态
Exce
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值