2018年11月10日

摘要: 陷入,中断和驱动程序 运行进程时,cpu 一直处于一个大循环中:取指,更新 PC,执行,取指……。但有些情况下用户程序需要进入内核,而不是执行下一条用户指令。这些情况包括设备信号的发出、用户程序的非法操作(例如引用一个找不到页表项的虚拟地址)。处理这些情况面临三大挑战:1)内核必须使处理器能够从用户 阅读全文
posted @ 2018-11-10 22:19 kexinxin 阅读(737) 评论(0) 推荐(0)
只有注册用户登录后才能阅读该文。 阅读全文
posted @ 2018-11-10 22:19 kexinxin 阅读(16) 评论(0) 推荐(0)
摘要: 调度 任何操作系统都可能碰到进程数多于处理器数的情况,这样就需要考虑如何分享处理器资源。理想的做法是让分享机制对进程透明。通常我们对进程造成一个自己独占处理器的假象,然后让操作系统的多路复用机制(multiplex)将单独的一个物理处理器模拟为多个虚拟处理器。本章将讲述 xv6 是如何为多个进程模拟 阅读全文
posted @ 2018-11-10 22:17 kexinxin 阅读(587) 评论(0) 推荐(0)
摘要: 文件系统 文件系统的目的是组织和存储数据,典型的文件系统支持用户和程序间的数据共享,并提供数据持久化的支持(即重启之后数据仍然可用)。 xv6 的文件系统中使用了类似 Unix 的文件,文件描述符,目录和路经名(请参阅第零章),并且把数据存储到一块 IDE 磁盘上(请参阅第三章)。这个文件系统解决了 阅读全文
posted @ 2018-11-10 22:17 kexinxin 阅读(1041) 评论(0) 推荐(0)
摘要: 锁 xv6 运行在多处理器上,即计算机上有多个单独执行代码的 CPU。这些 CPU 操作同一片地址空间并分享其中的数据结构;xv6 必须建立一种合作机制防止它们互相干扰。即使是在单个处理器上,xv6 也必须使用某些机制来防止中断处理程序与非中断代码之间互相干扰。xv6 为这两种情况使用了相同的低层概 阅读全文
posted @ 2018-11-10 22:16 kexinxin 阅读(312) 评论(0) 推荐(0)
摘要: PC 硬件 本文介绍供 x86 运行的个人计算机(PC)硬件平台。 PC 是指遵守一定工业标准的计算机,它的目标是使得不同厂家生产的机器都能够运行一定范围内的软件。这些标准随时时间迁移不断变化,因此90年代的 PC 与今日的 PC 看起来已是大不相同。 从外观来看,PC 是一个配置有键盘、屏幕和各种 阅读全文
posted @ 2018-11-10 22:15 kexinxin 阅读(432) 评论(0) 推荐(0)
摘要: 第一个进程 本章通过第一个进程的创建来解释 xv6 是如何开始运行的,让我们得以一窥 xv6 提供的各个抽象是如何实现和交互的。xv6 尽量复用了普通操作的代码来建立第一个进程,避免单独为其撰写代码。接下来的各小节中,我们将详细探索其中的奥秘。 xv6 可以运行在搭载 Intel 80386 及其之 阅读全文
posted @ 2018-11-10 13:38 kexinxin 阅读(858) 评论(0) 推荐(0)
摘要: 操作系统接口 操作系统的工作是(1)将计算机的资源在多个程序间共享,并且给程序提供一系列比硬件本身更有用的服务。(2)管理并抽象底层硬件,举例来说,一个文字处理软件(比如 word)不用去关心自己使用的是何种硬盘。(3)多路复用硬件,使得多个程序可以(至少看起来是)同时运行的。(4)最后,给程序间提 阅读全文
posted @ 2018-11-10 13:32 kexinxin 阅读(826) 评论(0) 推荐(0)
摘要: 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 阅读全文
posted @ 2018-11-10 13:29 kexinxin 阅读(735) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2018-11-10 13:27 kexinxin 阅读(304) 评论(0) 推荐(0)
摘要: XV6文件系统 buffer cache在内存中,大小有系统定义。对文件的操作都是对buffer cache进行操作的。对原始数据块的操作通过ide.c驱动程序进行磁盘数据的块读取。磁盘中存放的数据结构如下boot为操作系统的应道块,super记录了磁盘的信息(inodes的个数,起始地址,bit的 阅读全文
posted @ 2018-11-10 13:25 kexinxin 阅读(635) 评论(0) 推荐(0)
摘要: 上下文切换分为两种情况 用户程序陷入到内核,再从内核返回 两个应用程序之间的上下文切换 用户程序陷入到内核 用户程序陷入到内核通过中断INT指令,在xv6中系统调用的号为64 操作系统在初始化的时候会建立IDT表以及GDT表 通过INT找到IDT中的项,通过IDT中的项找到GDT中的项,最后定位到代 阅读全文
posted @ 2018-11-10 13:25 kexinxin 阅读(1380) 评论(0) 推荐(0)
摘要: 1. gdb GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c++程序员,gdb是必不可少的工具; 1.1. 启动gdb 对C/C++程序的调试,需要在编译前就加上-g选项: $g++ -g hello.cpp 阅读全文
posted @ 2018-11-10 13:24 kexinxin 阅读(535) 评论(0) 推荐(0)
摘要: C语言常见的函数调用 isatty,函数名,主要功能是检查设备类型,判断文件描述词是否为终端机。 函数名: isatty 用 法: int isatty(int desc); 返回值:如果参数desc所代表的文件描述词为一终端机则返回1,否则返回0。 程序例: #include <stdio.h> 阅读全文
posted @ 2018-11-10 13:24 kexinxin 阅读(6875) 评论(0) 推荐(0)
摘要: GDB使用例子 一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。如: > gcc -g hello.c -o hello> g++ -g hello.cpp -o 阅读全文
posted @ 2018-11-10 13:23 kexinxin 阅读(244) 评论(0) 推荐(0)
摘要: Vim使用手册 vi有两种操作方式,分别是: 命令模式(command mode):由命令序列组成,完成某些特定动作 插入模式(insert mode): 允许你输入文本 默认进入命令模式,当处于其他模式时,按esc回到命令模式 命令模式常用的命令 命令 作用 i 在当前光标处插入文本 o 在当前行 阅读全文
posted @ 2018-11-10 13:22 kexinxin 阅读(177) 评论(0) 推荐(0)
摘要: vim 窗口分割 vim支持窗口的水平分割和垂直分割。以下是常用的操作指令或快捷键。 命令 说明 vim -o <files> 打开多个文件,并将它们放在水平分割的窗口中 vim -O <files> 打开多个文件,并将它们放在垂直分割的窗口中 :sp[lit] [file] 不加file参数时,新 阅读全文
posted @ 2018-11-10 13:21 kexinxin 阅读(254) 评论(0) 推荐(0)
摘要: Linux暂停和恢复进程 kill -STOP 1234 将该进程暂停。 如果要让它恢复到后台,用kill -CONT 1234 (很多在前台运行的程序这样是不行的) 如果要恢复到前台,请在当时运行该进程的那个终端用jobs命令查询暂停的进程。 然后用 fg 〔job号〕把进程恢复到前台。 如果jo 阅读全文
posted @ 2018-11-10 13:21 kexinxin 阅读(19709) 评论(0) 推荐(0)
摘要: c语言头文件以及make注意事项 头文件说明:自己定义的头文件和项目文件放在一起,注意使用""而不是使用<>,系统的头文件才使用<> 当main函数要调用其他函数的时候在编译的时候需要将其他的c文件也一起编译 gcc main.c test.c makefile说明 当项目很大的时候可以使用make 阅读全文
posted @ 2018-11-10 13:20 kexinxin 阅读(577) 评论(0) 推荐(0)
摘要: 汇编 端口 端口 前面讲过,各种存储器都和CPU的地址线、数据线、控制线相连。CPU在操控它们的时候,把它们都当作内存来对待,把它们总的看做一个由若干存储单元组成的逻辑存储器,这个逻辑器我们称其为内存地址空间。 在PC机系统中,和CPU通过总线相连的芯片除各种存储器外,还有以下3种芯片: 1)各种接 阅读全文
posted @ 2018-11-10 13:18 kexinxin 阅读(410) 评论(0) 推荐(0)
摘要: Interrupt/trap gate 阅读全文
posted @ 2018-11-10 13:18 kexinxin 阅读(120) 评论(0) 推荐(0)
摘要: 汇编指令 CLI 全称 Clear Interupt STI 全称 Set Interupt CLD 全称 Clear Director STD 全称 Set Director CLI和STI是用来屏蔽中断和恢复中断用的,如 设置栈基址SS和偏移地址SP时,需要CLI,因为如果这两条指令被分开了,那 阅读全文
posted @ 2018-11-10 13:17 kexinxin 阅读(608) 评论(0) 推荐(0)
摘要: 64KB-4GB-64TB? 我记得大学的汇编课程、组成原理课里老师讲过实模式和保护模式的区别,在很多书本上也有谈及,无奈本人理解和感悟能力实在太差,在很长一段时间里都没真正的明白它们的内含,更别说为什么实模式下最大寻址空间为1MB?段的最大长度不超过64KB?而保护模式下为啥最大寻址能力就变成了6 阅读全文
posted @ 2018-11-10 13:17 kexinxin 阅读(346) 评论(0) 推荐(0)
摘要: I/O输入系统 计算机有两个主要任务:I/O操作与计算处理。在许多情况下,主要任务是I/O操作。而计算处理只是附带的。 操作系统在计算机I/O方面的作用是管理和控制I/O操作和I/O设备。 概述 对与计算机相连设备的控制是操作系统设计者的主要任务之一。 I/O设备技术呈现两个相矛盾的趋势。一方面,可 阅读全文
posted @ 2018-11-10 13:13 kexinxin 阅读(469) 评论(0) 推荐(0)
摘要: 大容量存储器的结构 文件系统从逻辑上可分为三个部分。用户和程序员所使用的的文件系统接口。操作系统实现该接口所使用的数据结构和算法。以及系统的最底层:次级和三级存储结构。 磁盘 磁盘(magnetic disk)为现代计算机系统提供了大容量的外存。从概念上来说,磁盘相对简单。 磁头与磁臂(disk a 阅读全文
posted @ 2018-11-10 13:12 kexinxin 阅读(1056) 评论(0) 推荐(0)
摘要: 文件系统实现 文件系统结构 磁盘提供大量的外部空间来维持文件系统。磁盘的下述两个特点,使其成为存储多个文件的方便介质: 可以原地重写,可以从磁盘上读一块,修改该快,并将它写回到原来的位置。 可以直接访问磁盘上的任意一块信息。因此,可以简单地顺序或随机地访问文件,从一个文件切换到另一个文件只需要简单地 阅读全文
posted @ 2018-11-10 13:11 kexinxin 阅读(1393) 评论(0) 推荐(0)
摘要: 文件系统接口 文件系统由两个部分组成:一组文件(文件用于存储相关数据)和目录结构(目录用于组织系统内的文件并提供有关文件的信息)。 文件概念 计算机能在多种不同介质上存储信息。为了方便地使用计算机习系统,操作系统提供了信息存储的统一逻辑接口。操作系统对存储设备的各种属性加以抽象,从而定义了逻辑存储单 阅读全文
posted @ 2018-11-10 13:09 kexinxin 阅读(1527) 评论(0) 推荐(0)
摘要: 虚拟内存 计算机系统使用的各种内存管理策略。所有这些策略都为同一目的:同时将多个进程存放在内存中,以便多道程序设计。不过,这些策略都需要在进程执行之前将整个进程放在内存中。 虚拟内存技术允许执行进程不必完全在内存中。这种方案的一个显著优点是程序可以比物理内存大。而且,虚拟内存将内存抽象成一个巨大,统 阅读全文
posted @ 2018-11-10 13:08 kexinxin 阅读(3144) 评论(1) 推荐(1)
摘要: 内存管理 内存由很大一组字或字节组成,每个字或字节都有自己的地址。CPU根据程序计数器(PC)的值从内存中提取指令,这些指令可能会引起进一步对特定内存地址的读取和写入。 背景 基本硬件 CPU所能直接访问的存储器只有内存和处理器内的寄存器。机器指令可以用内存地址作为参数,而不能用磁盘地址作为参数。C 阅读全文
posted @ 2018-11-10 13:07 kexinxin 阅读(546) 评论(0) 推荐(0)
摘要: 进程同步 协作进程是可以在系统内执行的其他进程相互影响的进程。互相协作的进程可以直接共享逻辑地址空间(即代码和数据),或者只通过文件或消息来共享数据。前者可通过轻量级进程或线程来实现。共享数据的并发访问可能会产生数据的不一致。本部分讨论各种机制,以用于确保共享同一逻辑地址空间的协作进程有序地执行,从 阅读全文
posted @ 2018-11-10 13:06 kexinxin 阅读(5108) 评论(0) 推荐(0)
摘要: 死锁 在多道程序环境下,多个进程可能竞争一定数量的资源。某个进程申请资源,如果这时资源不可用,那么该进程进入等待状态。如果所申请的资源被其他等待进程占有,那么该等待进程有可能再也无法改变其状态。这种情况称为死锁(deadlock)。 系统模型 正常操作模式下,进程只能按如下顺序使用资源: 申请:如果 阅读全文
posted @ 2018-11-10 13:06 kexinxin 阅读(229) 评论(0) 推荐(0)
摘要: CPU调度 引入了线程,对于支持它们的操作系统,是内核级的线程被操作系统调度,而不是进程。不过,术语线程调度或进程调度常常被交替使用。在讨论普通调度概念时使用进程调度,特别指定为线程概念时使用线程调度。 基本概念 CPU-I/O区间周期 CPU的成功调度依赖于进程的如下属性:进程执行由CPU执行和I 阅读全文
posted @ 2018-11-10 13:04 kexinxin 阅读(2007) 评论(0) 推荐(0)
摘要: 进程 进程可看做是正在执行的程序。进程需要一定的资源(如CPU时间,内存,文件和I/O设备)来完成其任务。这些资源在创建进程或执行进程时被分配。 进程是大多数系统中的工作单元。这样的系统由一组进程组成:操作系统进程执行系统代码,用户进程执行用户代码。所有这些进程可以并发执行。 虽然从传统意义上讲,进 阅读全文
posted @ 2018-11-10 13:03 kexinxin 阅读(212) 评论(0) 推荐(0)
摘要: 线程 概述 线程是CPU使用的基本单元,它由线程ID,程序计数器,寄存器集合和栈组成。它与属于同一进程的其他线程共享代码段,数据段和其他操作系统资源,如文件和信号。一个传统重量级(heavyweight)的进程只有单个控制线程。如果进程又多个控制线程,那么它能同时做多个任务。 下图说明了单线程和多线 阅读全文
posted @ 2018-11-10 13:03 kexinxin 阅读(330) 评论(0) 推荐(0)
摘要: 操作系统结构 操作系统服务 一组操作系统服务提供对用户很有用的函数:用户界面:所有的操作系统都有用户界面(user interface,UI)。用户界面可以有多种形式。一种是命令行界面(command-line interface,CLI),它采用文本命令,并用一定的方法输入(即一种允许输入并编辑的 阅读全文
posted @ 2018-11-10 13:02 kexinxin 阅读(987) 评论(0) 推荐(0)
摘要: 导论 操作系统做什么 操作系统是作为计算机和计算机用户之间的中介的程序。操作系统的目的是为用户提供方便且有效地执行程序的环境。 计算机系统可以大致分为4个组成部分:计算机硬件,操作系统,系统程序与应用程序和用户。 硬件,如中央处理单元(central processing unit,CPU)、内存( 阅读全文
posted @ 2018-11-10 13:00 kexinxin 阅读(795) 评论(0) 推荐(0)
摘要: 原码、补码、反码 无符号数 原码 原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值 [+1]原 = 0000 0001 [-1]原 = 1000 0001 第一位是符号位,因为第一位是符号位,所以8位二进制数的取值范围就是 [1111 1111 , 0111 1111],即:[-12 阅读全文
posted @ 2018-11-10 12:58 kexinxin 阅读(208) 评论(0) 推荐(0)
摘要: 处理器体系结构 指令集Y86-64寄存器 Y86-64处理器每个时钟周期执行一条完整的Y86-64指令。 X86-64寄存器有 程序员可见的状态的寄存器: Y86-64的状态类似于x86-64。有15个程序寄存器:%rax,%rcx,%rdx,%rbx,%rsp,%rbp,%rsi,%rdi和%r8 阅读全文
posted @ 2018-11-10 12:57 kexinxin 阅读(1506) 评论(0) 推荐(1)
摘要: CSAPP学习笔记—虚拟内存 符号说明 虚拟内存地址寻址 图9-12展示了MMU如何利用页表来实现这种映射。CPU中的一个控制寄存器,页表基址寄存器(Page Table Base Register,PTBR)指向当前页表。N位的虚拟地址包含两个部分:一个p位的虚拟页表偏移(Virtual Page 阅读全文
posted @ 2018-11-10 12:56 kexinxin 阅读(848) 评论(0) 推荐(0)

导航