Main.cc

//引导代码初始化操作系统内核。允许直接调用内部操作系统功能,简化调试和测试。在实践中,bootstrap代码只会初始化数据结构,

//并启动一个用户程序来打印登录提示。//许多内容只有在分配之后才是需要的。
(比如说在线程管理中,我们只定义了THREAD,这样文件系统等相关信息就不会被执行)

// Usage: nachos -d <debugflags> -rs <random seed #>
//  -s -x <nachos file> -c <consoleIn> <consoleOut>
//  -f -cp <unix file> <nachos file>
//  -p <nachos file> -r <nachos file> -l -D -t
//              -n <network reliability> -m <machine id>
//              -o <other machine id>
//              -z
//
//    -d causes certain debugging messages to be printed (cf. utility.h)
//    -rs causes Yield to occur at random (but repeatable) spots
//    -z prints the copyright message
//
//  USER_PROGRAM
//    -s causes user programs to be executed in single-step mode
//    -x runs a user program
//    -c tests the con

-d  与调试信息相关,如果执行时增加参数 -d -t 则是打印出和thread相关的调试信息,如果执行时增加参数 -d + 则打印出所有调试信息。否则不打印。
-d  所跟的参数代表了需要打印哪些相关参数(具体见utility.h)
-rs 在指定的范围内随机触发线程的Yield方法,让出cpu,这个范围就是-rs 之后跟的参数(个人理解,不一定对)
-z  打印版本信息

之后都是与 USER_PROGRAM,FILESYS,NETWORK相关的内容,现在先不考虑

//  FILESYS
//    -f causes the physical disk to be formatted
//    -cp copies a file from UNIX to Nachos
//    -p prints a Nachos file to stdout
//    -r removes a Nachos file from the file system
//    -l lists the contents of the Nachos directory
//    -D prints the contents of the entire file system
//    -t tests the performance of the Nachos file system
//
//  NETWORK
//    -n sets the network reliability
//    -m sets this machine's host id (needed for the network)
//    -o runs a simple test of the Nachos network software
//
//  NOTE -- flags are ignored until the relevant assignment.
//  Some of the flags are interpreted here; some in system.cc.
//
// Copyright (c) 1992-1993 The Regents of the University of California.
// All rights reserved.  See copyright.h for copyright notice and limitation
// of liability and disclaimer of warranty provisions.

#define MAIN
#include "copyright.h"
#undef MAIN #include "utility.h"
#include "system.h" #ifdef THREADS
extern int testnum;
#endif // External functions used by this file 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);

#ifdef THREADS
extern int testnum;
#endif
由于现在分析的是线程管理过程,我们在Makefile中只定义了THREADS
DEFINES = -DTHREADS
所以将会定义参数testnum,用来记录测试的线程数。
在额外函数中,我们只调用了如下函数,该函数在threadtest.cc 文件中,执行一个线程测试。
extern void ThreadTest(void)

//----------------------------------------------------------------------
// main
// Bootstrap the operating system kernel.
//
// Check command line arguments
// Initialize data structures
// (optionally) Call test procedure
//
// "argc" is the number of command line arguments (including the name of the command) -- ex: "nachos -d +" -> argc = 3
// "argv " is an array of strings, one for each command line argument ex: "nachos -d +" -> argv = {"nachos", "-d", "+"}
//----------------------------------------------------------------------

 

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
for (argc--, argv++; argc > ; argc -= argCount, argv += argCount) {
argCount = ;
switch (argv[][]) {
case 'q':
testnum = atoi(argv[]);
argCount++;
break;
default:
testnum = ;
break;
}
} ThreadTest();
#endif

nachos3.4 threads管理 (c++)的更多相关文章

  1. Nachos-Lab3-同步与互斥机制模块实现

    源码获取 https://github.com/icoty/nachos-3.4-Lab 内容一:总体概述 本实习希望通过修改Nachos系统平台的底层源代码,达到"扩展同步机制,实现同步互 ...

  2. Nachos-Lab2-线程调度模块实现

    源码获取 https://github.com/icoty/nachos-3.4-Lab 内容一:总体概述 本实习希望通过修改Nachos系统平台的底层源代码,达到"扩展调度算法" ...

  3. Android 性能优化(16)线程优化:Creating a Manager for Multiple Threads 如何创建一个线程池管理类

    Creating a Manager for Multiple Threads 1.You should also read Processes and Threads The previous le ...

  4. State Threads之co-routine的创建和stack的管理

    1. 综述 协程库 State Threads Library 是一个基于 setjmp/longjmp 实现的 C 语言版用户线程库或协程库(user level thread). 基本协程例子: ...

  5. Android线程管理之ThreadLocal理解及应用场景

    前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...

  6. Openfire的启动过程与session管理

    说明   本文源码基于Openfire4.0.2.   Openfire的启动       Openfire的启动过程非常的简单,通过一个入口初始化lib目录下的openfire.jar包,并启动一个 ...

  7. Atomikos实现多数据源的事物管理

    之前试过使用Spring动态切换数据库,通过继承AbstractRoutingDataSource重写determineCurrentLookupKey()方法,来决定使用那个数据库.在开启事务之前, ...

  8. Unity游戏开发中的内存管理_资料

    内存是手游的硬伤——Unity游戏Mono内存管理及泄漏http://wetest.qq.com/lab/view/135.html 深入浅出再谈Unity内存泄漏http://wetest.qq.c ...

  9. [MySQL]MySQL之权限管理

    一.MySQL权限简介 关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界.比如只允许你执行select操作,那么你就不能执行update操作.只允许你从某台机器上连接m ...

随机推荐

  1. 【转帖】微软全新Windows 10X细节一览

    微软全新Windows 10X细节一览 https://www.cnbeta.com/articles/tech/906241.htm windows NT之后 又一大改进 今年的Surface发布会 ...

  2. time包 — 汇总

    time包学习 package main; import ( "time" "fmt" ) func main() { //time.Time代表一个纳秒精度的 ...

  3. python函数知识五 推导式和内置函数一(了解)

    17.推导式: 推导式:将for循环多行变成一行 list推导式:[] #普通模式 print([i for i in range(20)]) #循环模式 #[变量 for i in range(20 ...

  4. Windows 10部署教程

    1. 获取主板密钥 在powershell中执行: (Get-WmiObject -query 'select * from softwareLicensingService').OA3xOrigin ...

  5. List集合String字符串按照汉语拼音排序

    public static void main(String[] args) { List<Map<String, Object>> mapList = new ArrayLi ...

  6. go 缓冲IO

    package main import ( "bufio" "fmt" "os" "strings" ) func ma ...

  7. Zookeeper学习笔记(三)——java客户端代码操作

    Zookeeper客户端java代码操作 上篇博客记录了shell命令操作zookeeper集群的方式,这次尝试采用java代码来操作.通过查阅API,发现并不困难. 1. 首先获得客户端与服务器的连 ...

  8. 解决Windows10关闭UAC后,开机启动项不生效的问题

    Windows10关闭UAC后,会发现启动项不生效. 运行输入gpedit.msc打开组策略(家庭版没有组策略功能) 依次展开计算机配置->Windows设置->安全设置->本地策略 ...

  9. WebapiController的名字不能随便取名

    在做webapi时候,遇到一个很坑的问题,就是新增一个控制器时,当新增加的控制器名称叫:AccountController.cs 自己测试,通过postman 访问 都没有问题,但是前端调用会报错,说 ...

  10. javascript 区域外事件捕捉setCapture

    今天遇到了这个方法,便去度娘了解了下 函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获.一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内.同一时刻只能有一个窗口捕获鼠标. ...