![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 81
lhw---9999
一个广义分离散列函数SHF(N; m, n,{w1, w2, …, wt})的矩阵表示满足下列性质:已知W1, W2, …, Wt (|Wi|=wi,1≤i≤t)是两两互不相交的分离子集,则在矩阵A中至少存在一行r,使得{ A(r, x): x∈Wi}∩{ A(r, x): x∈Wj}= (i≠j). 由定义可得。
展开
-
xv6实验课程--xv6的写时复制fork(2023)
对于大的地址空间,这样的复制过程很慢,并且是数据密集的。更糟糕的是,这项工作的大部分往往被浪费了,例如,fork()后的子进程紧接着执行exec()函数,这将导致子进程丢弃复制的内容,也就是说,这些复制的内容根本就没有被用到。修改uvmcopy()。fork函数会调用kernel/vm.c里的uvmcopy进行复制,因此只需要修改uvmcopy函数即可:删去uvmcopy中的kalloc函数,将子进程页表映射到父进程的物理地址,清除父子进程PTE的PTE_W位,增加COW标志位,增加物理内存引用计数。原创 2023-11-06 05:46:20 · 875 阅读 · 0 评论 -
该进程创建了多少个子进程,该语句执行结束后,该进程有多少个子孙进程
从上面的分析可知,A进程有3个子进程,其中一个子进程可以创建3个子孙进程,一个子进程可以创建1个子进程,还有一个子进程没有创建子进程,A进程共7个子进程。观察到的进程情况如下,系统中共有8个进程,14543是题目中所描述的A进程,14544、14545、14546是A的3个子进程,14547、14548是A的第一个子进程的子进程,14549是A的第二个子进程的子进程,14550是A的第一个子进程的孙进程。当n=2时,A进程创建了2个子进程,第1个子进程的i从n-1=1开始执行该循环语句;原创 2022-10-26 16:14:14 · 615 阅读 · 1 评论 -
xv6:一个简单的类Unix的教学操作系统-01
Xv6大体上遵循了v6的结构和风格,但它是用ANSI C[7]在多核RISC-V[15]上实现。在阅读本文时应该与xv6的源代码一起阅读,xv6的灵感来自John Lions的《Commentary on UNIX 6th Edition》[11]。参见https://pdos.csail.mit.edu/6.1810上xv6和xv6的线上资源,包括几个使用xv6进行实验的作业。转载 2022-10-25 10:27:45 · 937 阅读 · 0 评论 -
用C语言编写与多线程相关的某个面试题
题目描述:有四个线程1、2、3、4。线程1的功能输出1,线程2的功能输出2,以此类推。现有四个文件A、B、C和D,初始都为空。为了查看结果,我们定义N等于10,各个线程循环10次结束,编译程序,然后运行。用go语言实现,相对来说简单些,下面是用C语言实现。查看A、B、C和D的内容,看是否符合题意。用go语言编程实现的该题。...原创 2022-08-07 08:36:13 · 1435 阅读 · 0 评论 -
xv6实验课程--xv6的写时拷贝(COW)(2021)
虚拟内存提供了一个间接层(a level of indirection):内核可以通过将PTE标记为无效或只读来拦截内存引用,从而导致页面错误,并可以通过修改PTE来更改地址的含义。在计算机系统中有一种说法,任何系统问题都可以通过间接层来解决。懒页分配实验提供了一个例子,本实验探索了另一个例子:写时拷贝。注:懒页分配实验是2020年课程中的一个实验,目前,在2021年课程中缺少了这个实验,感兴趣的读者可在本公众号中找到。请切换到cow分支,开始本次实验。$ git fetch$ git checkout c原创 2021-10-09 14:15:59 · 3462 阅读 · 3 评论 -
xv6实验课程--页表(2021)
本文转自微信公众号:操作系统学习在本实验中,我们将探索页表并对其进行修改,以加快某些系统调用,并检测那些页面已被访问。在开始编码之前,请阅读xv6 book[1]和以下相关源程序:kern/memlayout.h,定义内存的布局。kern/vm.c,包含大多数虚拟内存(vm)代码。kernel/kalloc.c,包含分配和释放物理内存的代码。还可以参考RISC-V特权体系结构手册[2]。在启动实验时,请切换到pgtbl分支:$ git fetch$ git check..原创 2021-09-26 09:15:01 · 6998 阅读 · 5 评论 -
xv6--内存管理
文章来源: https://mp.weixin.qq.com/s/hEdFqOZfYnDmx_nIzcv6CA我们知道,用户程序和内核程序中的机器指令使用的地址是虚拟地址,而访问RAM或物理内存用的是物理地址。在xv6中通过页表硬件将每个虚拟地址映射到物理地址的方法来保证程序的正确执行。最新版的xv6是基于Sv39 RISC-V实现的,Sv39支持39位虚拟内存空间。每一页占用4KB内存,页内使用虚拟地址低12位寻址,虚拟地址的高27位划分为三级页号,每一级都有512个可用的页号。Sv39的页表对.原创 2021-08-30 15:50:03 · 2263 阅读 · 1 评论 -
xv6实验课程--系统调用
在开始编码之前,请阅读xv6手册的第2章、第4章的4.3节、4.4节以及下面所列相关源文件:系统调用的用户空间代码:在user/user.h和user/usys.pl中。内核空间代码:在kernel/syscall.h和kernel/syscall.c中。与进程相关的代码:在kernel/proc.h和kernel/proc.c中。 开始本实验前,请切换到syscall分支: $ git fetch $ git checkout syscall $ make clean1. 系统调用跟踪 (难度:中等原创 2021-05-07 10:01:57 · 9178 阅读 · 2 评论 -
北航操作系统实验入门
我给部分读者分配了登录北航操作系统实验平台的账号,但有读者反映不会操作,做起实验很困难。为了让读者尽快了解实验平台的操作,下面介绍lab0的实验步骤,希望读者能尽快掌握实验平台的使用方法。1.用学生账号登录2.点击【操作系统实验】进入实验界面3. lab0实验环境介绍,仔细阅读后点击【开始实验】4. 进入实验主界面5. 调整窗口,将窗口分成左右两个,左边是文档,右边是操作平台6. 直接从【0.6 实战测试】开始做实验,如果你对Linux/git/sed/...原创 2021-02-07 08:02:49 · 7365 阅读 · 2 评论 -
Linux共享内存实验
1. 共享内存的优缺点共享内存是在系统内核分配的一块缓冲区,多个进程都可以访问该缓冲区。共享内存通信方式的优点是进程间传递信息最快,因为客户进程和服务进程传递的数据直接从内存里存取,数据不需要在两进程间复制。另外,共享内存的生命周期随内核,即所有访问共享内存区域对象的进程都已经正常结束,共享内存区域对象仍然在内核中存在(除非显式删除共享内存区域对象),在内核重新引导之前,对该共享内存区域对象的任何改写操作都将一直保留。简单地说,共享内存区域对象的生命周期跟系统内核的生命周期是一致的,而且共享内存区域对.原创 2020-11-02 17:23:57 · 1588 阅读 · 0 评论 -
计算机中Dump的含义
本文来自:https://mp.weixin.qq.com/s/d5wRo72Kf3vYpUrkTLd5zADump的本意是"倾卸垃圾"、"把(垃圾桶)倒空"。在计算机技术中使用Dump的主要意思依然如此,即当电脑运行出现故障而无法排除时,通常要重新启动。为了找出故障的原因,需要分析现场(即出现故障时整个内存的当前状况),在重新启动系统之前需要把内存中的一片0、1(这时它们尤如一堆垃圾)"卸出"保存起来,以便由专家去分析引起故障的原因。dump在IBM词汇表[1]中是这样定义的:1.n. A co.原创 2020-10-14 18:35:33 · 24626 阅读 · 0 评论 -
CRT (C run-time library)简介
来自https://mp.weixin.qq.com/s/qg1mFzMEYv7GDDM72H1DOQ操作系统学习1.什么是CRTcrt是C run-time library的简称,称为C运行时库,它诞生于20世纪70年代,是程序在运行时所需要的库文件,属于C语言世界的概念。C语言是由贝尔实验室的Dennis Ritchie从1969年到1973年开发的。1973年,Ken Thompson和Ritchie使用C语言重写了90%以上的UNIX系统函数,并且把其中最常用的部分独立出来,形...原创 2020-10-10 23:13:23 · 3760 阅读 · 0 评论 -
UNIX操作系统发展史简介
本文来自https://mp.weixin.qq.com/s/GgXAGj0Kbo1gKPT4D4WYSA1964年贝尔实验室(Bell Labs)、通用电气(General Electric)和麻省理工学院(MIT)联合启动研发第二代分时操作系统MULTICS(Multiplexed Information and Computing Service)(注:MULTICS正式研制始于1965年)1969年,贝尔实验室研究人员Ken Thompson在退出MULTICS项目时,准备将原本在MULT.原创 2020-10-02 21:37:32 · 6069 阅读 · 0 评论 -
xv6 第5章 中断与设备驱动程序
第5章 中断与设备驱动程序驱动程序是操作系统中管理特定设备的代码:它配置设备硬件,告诉设备执行操作,处理由此产生的中断,并与可能正在等待来自设备的I/O的进程交互。驱动程序代码可能很棘手,因为驱动程序与它所管理的设备同时执行。此外,驱动程序必须了解设备的硬件接口,这可能是复杂的和缺乏文档的。需要操作系统注意的设备通常可以配置为生成中断,中断是陷入的一种类型。内核陷入处理代码识别设备何时引发中断并调用驱动程序的中断处理程序;在xv6中,这种调度发生在devintr(kernel/trap.c:1.原创 2020-09-21 20:59:21 · 684 阅读 · 0 评论 -
Linux权限简介 (译)
Linux permissions 101https://opensource.com/article/19/8/linux-permissions-101#comments作者:Alex Juarez时间:2019-08-01知道如何控制用户对文件的访问是一项基本的系统管理技能。Knowing how to control users' access to files is a fundamental system administration skill.图片来源..原创 2020-09-08 07:24:33 · 310 阅读 · 0 评论 -
素数的并发求解
本文来自:https://mp.weixin.qq.com/s/lrcWgcpVVjW5DL9UEQCyQw公元前250年古希腊的数学家埃拉托塞尼提出一种求解质数的方法,称为质数筛选法。具体做法是:先把N个自然数按次序排列起来。先划去1,因为1既不是质数,也不是合数。2是质数留下来,把2后面所有能被2整除的数都划去。在2后面留下的数是3,再把3后面所有能被3整除的数都划去。在3后面留下的数是5,把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的..原创 2020-09-01 15:20:16 · 1051 阅读 · 2 评论 -
并发与并行(译)
本文来自:https://mp.weixin.qq.com/s/vbnfN2TzhQC2Aa_wJ61RBQ本文来源:Bryant R E, O'Hallaron D R. Computer Systems: A Programmer's Perspective(3rd edition)[M]. Pearson Education Limited, 2016.Bryant R E, O'Hallaron D R. Computer Systems: A Programmer's Perspecti.原创 2020-09-01 07:49:16 · 238 阅读 · 0 评论 -
让我们开始编写操作系统吧(上)(译)
本文来自:https://mp.weixin.qq.com/s/hVzixQikzQSOpTQ5bWpGBQhttps://wiki.osdev.org/Getting_Started首先,开发一个操作系统可能是你用电脑能做的最具挑战性的事情之一(仅次于在Nightmare难度级别的Doom游戏中杀死最后一个BOSS)。编写一个操作系统需要计算机科学中几个复杂领域的很多知识。您需要了解硬件是如何工作的,能够读写复杂的汇编语言程序以及高级语言程序(如C、C++或Pascal)。你的大脑必须能够把自己包原创 2020-08-31 16:38:54 · 297 阅读 · 0 评论 -
xv6:一个简单的类Unix教学操作系统--操作系统接口--管道
1.3 管道管道是一个小的内核缓冲区,作为一对文件描述符提供给进程,一个用于读取,一个用于写入。从管道的一端写的数据可以从管道的另一端读取。管道为进程提供了一种通信方式。接下来的示例代码运行了程序wc,它的标准输出绑定到了一个管道的读端口。 1 int p[2]; 2 char *argv[2]; 3 argv[0] = "wc"; 4 arg原创 2020-08-28 16:53:31 · 839 阅读 · 0 评论 -
xv6:一个简单的类Unix教学操作系统--操作系统接口--进程和内存
xv6进程由用户空间内存(指令,数据和栈)和仅对内核可见的每个进程的状况组成。xv6支持分时特性:在可用的CPU上不停地切换等待运行的进程。当一个进程退出执行时,xv6保存它的CPU寄存器,并在下次运行时恢复它们。内核通过进程标识符或pid与每个进程相关联。进程可以使用fork系统调用创建一个新进程。Fork创建一个称为子进程的新进程,其内存内容与调用进程(称为父进程)完全相同。Fork在父、子进程中都会返回。在父进程中,fork返回子进程的pid;在子进程中返回零。例如,考虑用C语言[5]编写的下列程原创 2020-08-27 16:00:28 · 859 阅读 · 0 评论 -
xv6:一个简单的类Unix教学操作系统--操作系统接口--概述
本文来自: https://mp.weixin.qq.com/s/TV6dIAWCofVdiWIGd9PXDQxv6a simple, Unix-like teaching operating systemRuss Cox, Frans Kaashoek, Robert Morris原文:https://pdos.csail.mit.edu/6.828/2019/xv6/book-riscv-rev0.pdf前言和致谢这是一份关于操作系统课程的初稿。它通过研究一个称为xv6的示.原创 2020-08-26 17:29:33 · 2426 阅读 · 1 评论 -
xv6实验课程:xv6启动过程分析
本文来自:https://mp.weixin.qq.com/s/5KAaP4_-NX6W7dzh-AuyMQxv6系统运行在qemu虚拟机中,使用qemu启动xv6时,qemu将xv6内核加载到内存的0x8000000开始的存储空间中,然后,在RISC-V机器模式下,从 _entry开始执行指令(kernel/entry.S:12)。xv6启动时RISC-V的页设备是禁用的,虚拟内存直接映射到物理内存。一、entry.S//kernel/entry.S源程序清单_entry开始的指令设.原创 2020-08-22 09:44:02 · 3912 阅读 · 0 评论 -
xv6实验课程:Xv6和Unix实用程序
本实验让您熟悉xv6及其系统调用。官方文档:https://pdos.csail.mit.edu/6.828/2020/labs/util.html注:目前MIT 2020秋季实验课程网站文档不全,最好参考2019年秋季的课程。https://pdos.csail.mit.edu/6.828/2019/labs/util.html1. 启动 xv6 使用命令uname -a查看系统是否为:i386 GNU/Linux、i686 GNU/Linux或x86_64 GNU/Linux。我用的机器系统信息如下,原创 2020-08-20 09:10:47 · 2728 阅读 · 1 评论