
高级操作系统
取个程序猿的名字
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
高级操作系统——第十二周文件系统
标准输入文件,标准输出文件,标准错误输出文件执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。open文件让引用计数+1close文件让引用计数...原创 2019-12-04 18:36:50 · 131 阅读 · 0 评论 -
高级操作系统——文件系统Part4
Exercise 6 源代码阅读a) 阅读Nachos源代码中与异步磁盘相关的代码,理解Nachos系统中异步访问模拟磁盘的工作原理。filesys/filesys/synchdisk.cc首先理解disk调用机制。对于ReadSector或者WriteSectorvoidSynchDisk::ReadSector(int sectorNumber, char* data){lo...原创 2019-12-01 18:56:23 · 241 阅读 · 0 评论 -
高级操作系统——文件系统Part3
Exercise 5 动态调整文件长度对文件的创建操作和写入操作进行适当修改,以使其符合实习要求boolFileHeader::extraLengthAllocate(BitMap *bitmap, int fileSize) { int needSectors = divRoundUp(fileSize, SectorSize); int ordinalByte = FileLengt...原创 2019-11-29 17:30:39 · 139 阅读 · 0 评论 -
高级操作系统——文件系统Part2
Exercise 4 实现多级目录在原有的Nachos文件系统中,文件的目录只有根目录而且根目录中最多能放10个文件。table = new DirectoryEntry[size]现考虑将存放目录,即table[i]可以代表文件,也可以代表目录。在目录中增加三个属性,分别为绝对路径,目录地址,和文件类型(分为文件或目录)其中绝对路径为标识作用目录地址指的是该文件在哪个目录下,需要先找个...原创 2019-11-28 19:41:14 · 187 阅读 · 0 评论 -
高级操作系统——文件系统NachosPart1
filesys:1:FileSystem:初始化文件系统,为bitmap和directory分配扇区0和12:Create 创建文件(char *name, int initialSize)文件名和文件大小3:Open 打开文件 根据文件名打开文件【在directory中通过Find找到文件名,返回文件头文件对应的sector】 然后通过new OpenFile(sector)打开文件4:...原创 2019-11-27 21:37:15 · 465 阅读 · 0 评论 -
高级操作系统——十一周:文件系统
文件目录:每一个文件都有自己的文件目录目录项:构成文件目录的基本单元目录文件:文件目录的存储形式。一个文件目录可能有一个或者多个目录文件磁盘上的内容1:引导区包括从该卷引导操作系统所需要的信息每个卷(分区)一个,通常为第一个扇区2:卷(分区)信息包括该卷(分区)的块(簇)数、块(簇)大小、空闲块(簇)数量和指针、空闲FCB数量和指针3:目录结构(目录文件)4:用户文件...原创 2019-11-26 21:03:30 · 150 阅读 · 0 评论 -
高级操作系统——XV6中断机制
spinlock.c源码分析初始化lockvoidinitlock(struct spinlock *lk, char *name){lk->name = name;lk->locked = 0;lk->cpu = 0;}acquire获得锁,首先利用pushcli进行关中断,之后通过holding(lk)判断此锁已经被当前CPU获得,如果已经获得返回true,...原创 2019-11-20 10:43:55 · 724 阅读 · 0 评论 -
高级操作系统——第十周:同步机制part2
管程特殊的模块进程只能通过调用管程中的过程来间接地访问管程中的数据结构互斥: 管程的互斥性是由编译器负责、保证的同步:设置条件变量及等待/唤醒操作以解决同步问题条件变量可能有多个。比如打印机问题,没纸为一个条件变量队列,缺墨为一个条件变量队列从上面可以理解为,管程中可以有多个程序,但是只能有一个正在执行的程序当有多个进程同时在管程当一个进入管程的进程执行等待操作时,它应当释放管程的...原创 2019-11-19 20:11:08 · 229 阅读 · 0 评论 -
高级操作系统——Nachos同步机制
三、条件变量条件变量是另外一种同步机制,可以用于线程和管程中的进程互斥。通常与互斥量一起使用。条件变量允许线程由于一些暂时没有达到的条件而阻塞。通常,等待另一个线程完成该线程所需要的条件。条件达到时,另外一个线程发送一个信号,唤醒该线程。条件变量对应的一组操作是pthread_cond_wait和pthread_cond_signal。条件变量与互斥量一起使用,一般情况是:一个线程锁住一个...原创 2019-11-16 20:10:01 · 488 阅读 · 0 评论 -
高级操作系统——第九周【同步机制】
互斥问题软件解法Dekker算法Peterson算法硬件解决方法:中断屏蔽方法利用开关中断1:关中断方法不适用于多CPU系统,因为关中断只能保证CPU不由一个进程切换到另外一个进程,从而防止多个进程并发地进入公共临界区域。但即使关中断后,不同进程仍可以在不同CPU上并行执行关于同一组共享变量的临界区代码.2:只适用于内核级:因为开关中断命令只能由内核调用,给用户会出问题3:临...原创 2019-11-12 21:06:28 · 592 阅读 · 1 评论 -
高级操作系统——C语言基础知识+Linux(3)
关于修改文件权限ls -l 显示整个目录的文件权限ls -l 1.txt 展示某个文件的文件权限文件权限构成:所有者 用户组 其他用户修改权限:chmod 444 1.txt关于proc目录下的文件proc下的文件,proc文件系统属于虚拟文件系统,即该文件系统的数据,由内核动态生成,并不会存放在持久存储数据中,即不会放入磁盘使得内核可以生成与系统状态和配置有关的信息所以如果我...原创 2019-11-12 15:31:09 · 185 阅读 · 0 评论 -
高级操作系统——虚拟化技术学习(Part2 容器技术)
虚拟机和容器的区别:占用资源少部署快:利用Docker 镜像快速部署启动快:共享主机 OS Kernel,快速加载容器读和写高于虚拟机,效率远远高于虚拟机的效率容器化的封闭性、安全性不如虚拟机。容器叫做Linux container,LXC的全称。LXC的三大特色:cgroup,namespace和unionFS。cgroup:CGroups 全称control group,用来...原创 2019-11-08 10:51:01 · 291 阅读 · 0 评论 -
高级操作系统——nachos内存管理(分页式内存管理)
Exercise 4 内存全局管理数据结构设计并实现一个全局性的数据结构(如空闲链表、位图等)来进行内存的分配和回收,并记录当前内存的使用状态首先注意Nachos的设计特点:1:物理内存32页,每一页128B,一共有4KB。这32页物理内存从物理地址0开始分布,所以我们分配物理内存可以直接分配i*128B。就如**addrspace.cc中pageTable[i].physicalPage ...原创 2019-11-05 11:45:30 · 1141 阅读 · 0 评论 -
高级操作系统——第六周内存管理(2)
二级页表的寻址之前一直以为自己懂了,可是细想发现其实没懂。首先看二级,一级页表的机构这里要注意一些名称代词:PD:页目录(指的是二级页表) PDE:页目录项 PDI:页目录索引PT:页表 PTE:页表项 PTI:页表索引PFN:页框号32位地址:10位页目录项,10位页表项,12位页偏移(VPN+VPO)之前其实我一直以为,PD里面存储的是32位地址(即页表的地址)所以会占用4...原创 2019-11-03 15:13:13 · 249 阅读 · 0 评论 -
高级操作系统——XV6内存管理
二级页表的寻址之前一直以为自己懂了,可是细想发现其实没懂。首先看二级,一级页表的机构这里要注意一些名称代词:PD:页目录(指的是二级页表) PDE:页目录项 PDI:页目录索引PT:页表 PTE:页表项 PTI:页表索引PFN:页框号32位地址:10位页目录项,10位页表项,12位页偏移(VPN+VPO)之前其实我一直以为,PD里面存储的是32位地址(即页表的地址)所以会占用4...原创 2019-11-03 15:12:49 · 3226 阅读 · 1 评论 -
高级操作系统——虚拟化技术学习(Part1)
多计算系统公司运营的时候,会拥有邮件服务器,web服务器等服务器。这些服务器运行在不同计算机上作用:1:可靠性。机器发生故障是常态2:安全性。沙盒原理,攻击者攻陷某个服务器不一定能获得他想要的信息3:某个机器无法承受所有负载优化:使用虚拟机:VMM虚拟机管理程序的确,在一个虚拟化系统中,将不同的服务器安装在不同的虚拟机上,就像把所有鸡蛋放在一个篮子里,如果硬件出现故障那么带来的后果是...原创 2019-11-01 18:22:33 · 1488 阅读 · 0 评论 -
高级操作系统——Nachos内存管理(TLB异常处理)
对系统machine.h:1:定义页表大小,页表最大内存2:异常种类3:寄存器种类machine.cc1:将寄存器,页表和快表,全置为空 Machine2:处理异常 RaiseException3:调试 Debugger4:输出所有寄存器的值DumpState5:写入或者读出寄存器的值ReadRegister, WriteRegisterexception.cc:1:处理...原创 2019-10-31 18:29:41 · 1465 阅读 · 0 评论 -
高级操作系统——第七周【页表置换】
CPU内存-Cache-寄存器(CPU里)(1)计算对位进行操作的函数的组合逻辑(ALU);(2)存储位的存储器元素(寄存器);[貌似速度比cache还快?](3)控制存储器元素更新的时钟信号。(4)cache :Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在C...原创 2020-01-06 15:26:35 · 1234 阅读 · 0 评论 -
高级操作系统——第六周(内存)
为什么要有进程地址空间某台计算机总的内存大小是 128M ,现在同时运行两个程序 A 和 B , A 需占用内存 10M , B 需占用内存 110 。计算机在给程序分配内存时会采取这样的方法:先将内存中的前 10M 分配给程序 A ,接着再从内存中剩余的 118M 中划分出 110M 分配给程序 B 。这种分配方法可以保证程序 A 和程序 B 都能运行,但是这种简单的内存分配策略问题很多。问...原创 2019-10-22 20:57:31 · 460 阅读 · 0 评论 -
高级操作系统——XV6中断机制
1. 什么是用户态和内核态?两者有何区别?什么是中断和系统调用?两者有何区别?计算机在运行时,是如何确定当前处于用户态还是内核态的?用户态:运用非特权指令,在Linux中特权级为3级,Ring3,最低。不能访问内核态的地址空间包括代码和数据内核态:能够运用特权和非特权指令(除了访管指令),在Linux中特权级为0级,最高。能访问例子:如:用户运行一个程序,该程序创建的进程开始时运行自己的代...原创 2019-10-19 23:05:16 · 1051 阅读 · 0 评论 -
高级操作系统——C语言基础知识(2)
宏函数我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义: #define MAX( a, b) ( (a) > (b) (a) : (b) ) 或者函数实现 int max( int a, int b) { return (a > b a : b) } 很显然,我们不会选择用函数来完成这个任务,原因有两个 1:首先,函数调用会带...原创 2019-10-19 22:23:02 · 332 阅读 · 0 评论 -
高级操作系统——XV6进程管理(proc.c)
struct { struct spinlock lock; struct proc proc[NPROC];} ptable;//进程索引表,64个进程以数组的形式记录static struct proc *initproc;//初始进程,userinit调用中赋值// Look in the process table for an UNUSED proc.// If fo...原创 2019-10-18 21:45:43 · 2291 阅读 · 0 评论 -
高级操作系统——第五周 中断机制实例
实模式和保护模式 实模式是早期CPU运行的工作模式,而保护模式则是现代CPU运行的模式。 实模式出现于早期8088CPU时期。当时由于CPU的性能有限,一共只有20位地址线(所以地址空间只有1MB),以及8个16位的通用寄存器,以及4个16位的段寄存器。所以为了能够通过这些16位的寄存器去构成20位的主存地址,必须采取一种特殊的方式。当某个指令想要访问某个内存地址时,它通常需要用下面的这种格...原创 2019-10-15 21:03:55 · 470 阅读 · 0 评论 -
高级操作系统——第四周中断机制
一:CPU处理器由运算器:ALU 逻辑运算单元控制器:PC IR寄存器高速缓存构成两类寄存器:用户可见寄存器 :高级语言编译器通过优化算法分配并使用之,以减少程序访问内存次数数据寄存器(data register ) 又称通用寄存器主要用于各种算术逻辑指令和访存指令地址寄存器(address register ) 用于存储数据及指令的物理地址、线性地址或者有效地址,用于某种特定方...原创 2019-10-08 21:36:00 · 487 阅读 · 0 评论 -
高级操作系统——XV6进程管理
源代码阅读:type.h:用于声明一些数据类型的简化名称,和声明页表指针的数据类型。param.h:主要用于声明基本的一些常量,包括内核栈大小等。memlayout.h:主要用于声明一些和内存与地址相关的常量与方法,包括虚拟内存转物理内存的方法以及物理内存转虚拟内存的方法等。defs.h:声明在之后文件中要用到的函数。x86.h:让c代码使用特殊的x86汇编的一些函数包括outb等,并声...原创 2019-10-06 16:34:00 · 5932 阅读 · 0 评论 -
高级操作系统——Nachos进程调度
因为这篇文章引用博主 superli90有点多了(主要是他写的很清楚,我也不知道在哪找。所以就直接引用过来了Hhh)于是首先附上链接版权声明:本文为CSDN博主「superli90」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/superli90/article/details/29373593...原创 2019-10-03 19:46:17 · 713 阅读 · 0 评论 -
高级操作系统——Nachos进程管理
Exercise 1 调研调研Linux或Windows中进程控制块(PCB)的基本实现方式,理解与Nachos的异同。答案:linux:利用task_struct来描述数据结构windows:利用EPROCESS、KPROCESS、PEB来描述。功能齐全,主要有以下:1:进程描述信息• 进程标识符(process ID) ,唯一,通常是一个整数• 进程名,通常基于可执行文件名(...原创 2019-09-27 20:32:05 · 881 阅读 · 0 评论 -
高级操作系统——C语言基础知识
1:预编译:预编译一般用来防止头文件的重复包含和编译,通过#ifndef等指令判断是否已经引入2:main中 (int argc, char **argv):argv表示命令行输入值得个数argv[0]:argv[0] 指向程序运行的全路径名,argv[1] 指向在DOS命令行中执行程序名后的第一个字符串,argv[2] 指向执行程序名后的第二个字符串,argv[argc]为NULL。3:...原创 2019-09-25 14:49:10 · 226 阅读 · 0 评论