操作系统——OrangeS

news/2025/4/1 8:17:29/

操作系统——OrangeS

实验环境:

VMware + Ubuntu32位

实验步骤:

自学第10章内容,理清相关代码结构,以及OrangeS所支持的功能

• 要求

– 利用当前OrangeS所提供的系统调用和API,自行编写一个应用程序,并编译生成存储在文件系统
– 在Shell中调用该程序,可启动并执行进程
– 进程结束后返回Shell
– 提示
• 可先尝试把chapter10/e代码跑通,倒退理解文件目录与代码结构
• 在linux里编写并编译生成,放到OrangeS的文件系统中

1.首先我们先理清楚大致的代码结构

在这里插入图片描述
Boot/:从软盘启动操作系统;
Command/:定义的应用程序,也就是在shell中可以工作的应用程序;
Fs/:文件系统;
Include/:头文件;
Kernel/:内核部分;
Lib/:定义的一些可以被调用的函数,其中包括
在这里插入图片描述
Fork.c,vsprintf.c都是很重要的;
Mm/:进程处理模块;
其余模块就不详细说明了,包括了一些镜像与bochs的设置文件等。

2.首先跑通原始代码

1)Hztian_final/Command/makefile
在这里插入图片描述
2)Hztian_final/makefile
在这里插入图片描述
在这里插入图片描述

进入bochs:
在这里插入图片描述
此时按ctrl + f2会切换到shell中1:
Echo hiztnb,将打印echo之后的字符串:
在这里插入图片描述

按ctrl + f3进入shell2中:
Pwd,将打印当前运行程序与路径。由于文件系统比较简单,所以只会打印一个pwd:
在这里插入图片描述
到这里为止,书上第十章给出的代码我们已经成功实现,代码中实现的两个指令pwd和echo都是可以运行的。

3.shell实现分析

由于我们要对他的shell进行修改并扩展,所以我们需要先了解他的shell是如何运行的。
1)Fork
Fork的概念在上学期的操作系统课程中就有接触,我记得还让我们编写了父子进程调用的代码,就是使用的fork函数。但在这里我们的任务则是实现一个fork函数,这就涉及到进程的切换了。在之前的章节中,我们的进程都是我们手动加的,每次要加进程的时候都需要直接来修改底层代码,这有点不符合常理…而shell就是一个很好的创建进程的功能。

Shell的功能:根据用户输入,开启一个子进程来处理用户输入,并等待子进程返回结果。当子进程返回时,回到shell当中继续等待用户输入。

从功能上看,这与我们的父子进程是基本相同的。在了解了这些之后,我们来看fork的实现过程。
在这里插入图片描述
还是挺简短的,这个函数只是将msg的type值设置成了FORK(宏定义的值),然后将msg和其他一些参数传递给了send_recv函数,这个函数将会创建子进程,并将创建的结果存放在msg.PID中,以作为fork函数的返回值。
Fork函数虽然就这么简短,但是要做的准备工作还是挺多的。子进程得到的是除了代码段是与父进程共享的意外,其他所有的都是得到父进程的一个副本,子进程的所有资源都继承父进程,得到父进程资源的副本,既然为副本,也就是说,二者并不共享地址空间。,两个是单独的进程,继承了以后二者就没有什么关联了,子进程单独运行。由此可见,代码段、堆栈段都是需要进行处理之后,才能顺利的使用fork函数。在我们的代码中使用的是do_fork函数来实现的。
在这里插入图片描述
复制进程表;
在这里插入图片描述

共享代码段;

在这里插入图片描述

复制堆栈段与数据段;
在这里插入图片描述

如果出现文件的处理,父子进程的文件也应是共用的;
在这里插入图片描述

产生子进程!

2)shabby_shell
这个名字刚看到的时候确实有点意思,叫这个名字,他的原理看起来也不是很复杂。
在这里插入图片描述
如果输入正确,则产生子进程,并将用户输入的字符串传递给子进程让他进行处理,父进程等待;
如果输入不正确,直接回显用户输入的指令,结束。
我们的代码对这个函数的调用如下:
在这里插入图片描述
这是在init函数中的,也就是说在准备好父子进程调度之后,init创建两个子进程,分别为shell1,shell2。

4.shell功能拓展

在了解了shell的产生和工作过程之后,我们先来看看makefile中是怎么将进行编译链接的。
在这里插入图片描述
我们运行的程序最初来源于command文件夹中编译后的文件。Command中的Makefile将该文件夹中的程序编译后打包为tar文件,再将打包后的tar文件整个装入磁盘。所以毋庸置疑,我们只需要在command/中来写自己的程序,并修改makefile就应该可以了。
在这里插入图片描述
然后我们来修改makefile:
在这里插入图片描述
修改部分由框图所示,我们来make一下。
在这里插入图片描述
重新make image后,启动bochs:
在这里插入图片描述

当只输入hizt指令时,它会提示你hizt指令之后应跟上其他内容;
在这里插入图片描述

当hizt指令后跟上一个open指令,之后再加上一个文件名,将会输出正在打开文件的提示。由于我没有修改文件系统,所以此时仅仅是一个提示,还没有打开文件的功能。


http://www.ppmy.cn/news/672075.html

相关文章

秋叶老师

我与秋叶老师 第一次 是2016年4月份,他来我学校做PPT讲座,当时我还是好奇,PPT有啥好讲的,就带着好奇去听了,讲座的大教室满满当当的,我只好挤在门口听了。 秋叶老师讲了他做PPT的技巧,他的技…

秋叶-PPT总结

办公必备的PPT网站 pexel:高清图片网站Undraw:扁平化设计平台Svgbackgrounds:纹理背景设计网站,基于CSSMixit:视频素材网站设计网站:素材导航网站Iconfont:矢量图标库,免费图标和插画…

操作系统 第七章 作业

多选题 以下说法正确的是( )? A. 受限于硬件或操作系统支持,存在存储器末尾空间访问不到的情况 B. 物理地址指的是实际地址,相对地址则是一个相对于参考(起始)地址的地址 C. 地址空间取决于计…

【OS课设日志】《Orange‘S:一个操作系统的实现》Ch3

《Orange’S:一个操作系统的实现》第三章——保护模式 实验内容:认识保护模式,实现从实模式到保护模式的转换,GDT描述符;实现实模式大于1MB内存的寻址能力,并接着上一次实验,从保护模式返回到实…

【操作系统】——PV操作

大家都说操作系统中的PV操作部分看不懂,确实我在专业课中学习这门课时,PV操作被列为书中的重点和难点,就是因为它不好理解。当时自己听完课也是一头雾水,到期末考试结束,也没弄明白这是怎么一回事,更没有意…

操作系统-AOSOA

一、个人感受 1.1 权衡 在我写这份报告的时候,已经是 6 月 30 号了,经历了一个学期的“折磨”,我面对终点,已经没啥感觉了,就想着赶快呼噜完了就完事了。其实做这个项目最大的体会就是“人力有穷,一切皆权…

服务器没有及时响应怎么解决,秋叶操作win10系统提示“服务器没有及时响应或控制请求”的具体技巧...

许多win10系统用户在工作中经常会遇到win10系统提示“服务器没有及时响应或控制请求”的情况,比如近日有用户到本站反映说win10系统提示“服务器没有及时响应或控制请求”的问题,但是却不知道要怎么解决win10系统提示“服务器没有及时响应或控制请求”&a…

秋叶

①一场风雨后,街旁的树下就落了一层叶子。 ②这是故乡的初秋,叶子也该是些早熟的叶子,从湛蓝旷远的天空悠然飘落,百转千回之后遗落于地,并没有什么生命遗失的痉挛和苦痛的挣扎,一如它们生时的超脱、潇洒和…