摘要:
陷入,中断和驱动程序 运行进程时,cpu 一直处于一个大循环中:取指,更新 PC,执行,取指……。但有些情况下用户程序需要进入内核,而不是执行下一条用户指令。这些情况包括设备信号的发出、用户程序的非法操作(例如引用一个找不到页表项的虚拟地址)。处理这些情况面临三大挑战:1)内核必须使处理器能够从用户 阅读全文
摘要:
调度 任何操作系统都可能碰到进程数多于处理器数的情况,这样就需要考虑如何分享处理器资源。理想的做法是让分享机制对进程透明。通常我们对进程造成一个自己独占处理器的假象,然后让操作系统的多路复用机制(multiplex)将单独的一个物理处理器模拟为多个虚拟处理器。本章将讲述 xv6 是如何为多个进程模拟 阅读全文
摘要:
文件系统 文件系统的目的是组织和存储数据,典型的文件系统支持用户和程序间的数据共享,并提供数据持久化的支持(即重启之后数据仍然可用)。 xv6 的文件系统中使用了类似 Unix 的文件,文件描述符,目录和路经名(请参阅第零章),并且把数据存储到一块 IDE 磁盘上(请参阅第三章)。这个文件系统解决了 阅读全文
摘要:
锁 xv6 运行在多处理器上,即计算机上有多个单独执行代码的 CPU。这些 CPU 操作同一片地址空间并分享其中的数据结构;xv6 必须建立一种合作机制防止它们互相干扰。即使是在单个处理器上,xv6 也必须使用某些机制来防止中断处理程序与非中断代码之间互相干扰。xv6 为这两种情况使用了相同的低层概 阅读全文
摘要:
PC 硬件 本文介绍供 x86 运行的个人计算机(PC)硬件平台。 PC 是指遵守一定工业标准的计算机,它的目标是使得不同厂家生产的机器都能够运行一定范围内的软件。这些标准随时时间迁移不断变化,因此90年代的 PC 与今日的 PC 看起来已是大不相同。 从外观来看,PC 是一个配置有键盘、屏幕和各种 阅读全文
摘要:
第一个进程 本章通过第一个进程的创建来解释 xv6 是如何开始运行的,让我们得以一窥 xv6 提供的各个抽象是如何实现和交互的。xv6 尽量复用了普通操作的代码来建立第一个进程,避免单独为其撰写代码。接下来的各小节中,我们将详细探索其中的奥秘。 xv6 可以运行在搭载 Intel 80386 及其之 阅读全文
摘要:
操作系统接口 操作系统的工作是(1)将计算机的资源在多个程序间共享,并且给程序提供一系列比硬件本身更有用的服务。(2)管理并抽象底层硬件,举例来说,一个文字处理软件(比如 word)不用去关心自己使用的是何种硬盘。(3)多路复用硬件,使得多个程序可以(至少看起来是)同时运行的。(4)最后,给程序间提 阅读全文
摘要:
Ubuntu16.04SLT 64位 工具链 sudo apt-get install gcc-multilib libsdl1.2-dev, libtool-bin, libglib2.0-dev, libz-dev, and libpixman-1-dev. 下载lab进行make编译 下载qe 阅读全文
摘要:
XV6文件系统 buffer cache在内存中,大小有系统定义。对文件的操作都是对buffer cache进行操作的。对原始数据块的操作通过ide.c驱动程序进行磁盘数据的块读取。磁盘中存放的数据结构如下boot为操作系统的应道块,super记录了磁盘的信息(inodes的个数,起始地址,bit的 阅读全文
摘要:
上下文切换分为两种情况 用户程序陷入到内核,再从内核返回 两个应用程序之间的上下文切换 用户程序陷入到内核 用户程序陷入到内核通过中断INT指令,在xv6中系统调用的号为64 操作系统在初始化的时候会建立IDT表以及GDT表 通过INT找到IDT中的项,通过IDT中的项找到GDT中的项,最后定位到代 阅读全文
摘要:
1. gdb GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c++程序员,gdb是必不可少的工具; 1.1. 启动gdb 对C/C++程序的调试,需要在编译前就加上-g选项: $g++ -g hello.cpp 阅读全文
摘要:
C语言常见的函数调用 isatty,函数名,主要功能是检查设备类型,判断文件描述词是否为终端机。 函数名: isatty 用 法: int isatty(int desc); 返回值:如果参数desc所代表的文件描述词为一终端机则返回1,否则返回0。 程序例: #include <stdio.h> 阅读全文
摘要:
GDB使用例子 一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。如: > gcc -g hello.c -o hello> g++ -g hello.cpp -o 阅读全文
摘要:
Vim使用手册 vi有两种操作方式,分别是: 命令模式(command mode):由命令序列组成,完成某些特定动作 插入模式(insert mode): 允许你输入文本 默认进入命令模式,当处于其他模式时,按esc回到命令模式 命令模式常用的命令 命令 作用 i 在当前光标处插入文本 o 在当前行 阅读全文
摘要:
vim 窗口分割 vim支持窗口的水平分割和垂直分割。以下是常用的操作指令或快捷键。 命令 说明 vim -o <files> 打开多个文件,并将它们放在水平分割的窗口中 vim -O <files> 打开多个文件,并将它们放在垂直分割的窗口中 :sp[lit] [file] 不加file参数时,新 阅读全文
摘要:
Linux暂停和恢复进程 kill -STOP 1234 将该进程暂停。 如果要让它恢复到后台,用kill -CONT 1234 (很多在前台运行的程序这样是不行的) 如果要恢复到前台,请在当时运行该进程的那个终端用jobs命令查询暂停的进程。 然后用 fg 〔job号〕把进程恢复到前台。 如果jo 阅读全文
摘要:
c语言头文件以及make注意事项 头文件说明:自己定义的头文件和项目文件放在一起,注意使用""而不是使用<>,系统的头文件才使用<> 当main函数要调用其他函数的时候在编译的时候需要将其他的c文件也一起编译 gcc main.c test.c makefile说明 当项目很大的时候可以使用make 阅读全文