Nachos源代码分析(一)
//
main.cc
// 初始化操作系统内核
//
// 这部分代码一般是初始化各个数据结构,并且而启动一个用户程序来输出登陆提示信息
// (具体命令行参数用法省略)
#define
#include
"copyright.h"
#undef
#include
"utility.h"
#include
"system.h"
//引入文件中使用的外部函数
extern
void ThreadTest(void), Copy(char *unixFile, char *nachosFile);
extern
void Print(char *file), PerformanceTest(void);
extern
void StartProcess(char *file), ConsoleTest(char *in, char *out);
extern
void MailTest(int networkID);
//----------------------------------------------------------------------
//
main
//
功能:启动操作系统内核
//
// 1,检查命令行参数
// 2,初始化数据结构
// 3,(可选) 调用测试方法
//----------------------------------------------------------------------
int
main(int argc, char **argv)
{
int argCount; // the number of arguments for a particular command
DEBUG('t', "Entering main");
(void) Initialize(argc, argv);//具体的初始化工作
#ifdef
THREADS
ThreadTest();//线程管理测试
#endif
for (argc--, argv++; argc > 0; argc -=
argCount, argv += argCount) {
argCount = 1;
if (!strcmp(*argv,
"-z")) // print
copyright
printf (copyright);
#ifdef
USER_PROGRAM //用户程序运行测试
if (!strcmp(*argv, "-x"))
{ //
run a user program
ASSERT(argc > 1);
StartProcess(*(argv + 1));
argCount = 2;
} else if (!strcmp(*argv,
"-c")) { // test the
console
if (argc == 1)
ConsoleTest(NULL, NULL);
else {
ASSERT(argc > 2);
ConsoleTest(*(argv + 1), *(argv + 2));
argCount = 3;
}
interrupt->Halt(); //
once we start the console, then
// Nachos will loop
forever waiting
// for console input
}
#endif
// USER_PROGRAM
#ifdef
FILESYS //文件管理测试
if (!strcmp(*argv, "-cp")) { // copy from UNIX to Nachos
ASSERT(argc > 2);
Copy(*(argv + 1), *(argv + 2));
argCount = 3;
} else if (!strcmp(*argv, "-p"))
{ // print a Nachos file
ASSERT(argc > 1);
Print(*(argv + 1));
argCount = 2;
} else if (!strcmp(*argv, "-r"))
{ // remove Nachos file
ASSERT(argc > 1);
fileSystem->Remove(*(argv + 1));
argCount = 2;
} else if (!strcmp(*argv, "-l"))
{ // list Nachos directory
fileSystem->List();
} else if (!strcmp(*argv, "-D"))
{ // print entire filesystem
fileSystem->Print();
} else if (!strcmp(*argv, "-t"))
{ // performance test
PerformanceTest();
}
#endif
// FILESYS
#ifdef
NETWORK //网络管理测试
if (!strcmp(*argv, "-o")) {
ASSERT(argc > 1);
Delay(2); // delay for 2 seconds
// to give the
user time to
// start up
another nachos
MailTest(atoi(*(argv + 1)));
argCount = 2;
}
#endif
// NETWORK
}
currentThread->Finish(); //main快结束了,切换到其他生成的线程,从而让main函数无法终止
return(0); //
Not reached...
}
作者:洞庭散人
出处:http://phinecos.cnblogs.com/
posted on 2007-10-31 22:24 Phinecos(洞庭散人) 阅读(3404) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2006-10-31 WebCast听课录(11)