MIT_6.s081_Lab4_traps 先来说说trap我们知道,用户态切换到内核态的有两种情况:一种是系统调用(syscall),另一种是异常(trap)或中断(interruption),在前面的实验中我们学习了系统调用。我们先来回忆一下在lab1中做过的sleep任务。在进入内核后,会调用sys_sleep函数。关于用户态转到内核态我们在lab2中已经讲过了。 trap机制在x86中我们常常说中断,但是在xv6中我们都是使用tra 2022-02-01 操作系统 MIT_s.081_Lab
MIT_6.s081_lab3_pagetables 当我第一次学习它,还是一个学生的时候,我想它是很直接的,能有多难,就是一个表要将虚拟地址映射到物理地址。或许有点复杂,但不是那么复杂。只有当用它编程时,我才知道虚拟内存是巧妙的,迷人的,非常强大。 在本次实验中,您将探索页表并修改它们以简化将数据从用户空间复制到内核空间的函数。在讲解实验之前,我们先要了解页表结构。 页表(pagetable)是用来干什么的?页表的作用是地址翻译,从Virtua 2022-01-19 操作系统 MIT_s.081_Lab
Stanford_CS144_Lab4 在这一关要求实现一个TCPConnection类,基于TCP的有限状态机,将send和recieve封装起来。也就是说,作为一个TCP客户端,我们有自己的sender和receiver,现在要用这个客户端与其他主机进行联系,所以我们要实现TCP的各种FSM。 在tests文件夹中,我们可以看到很多关于fsm的测试文件,这些就是基于不同的有限状态机的测试,因此,我们掌握了TCP的有限状态机,才能将这 2022-01-13 计算机网络 standford_cs144_lab
xv6-实验参考书解析 第0章操作系统接口本书通过xv6操作系统来阐述操作系统的概念,它提供Unix操作系统中的基本接口,同时模仿Unix的内部设计。 xv6提供了传统的内核概念,即一个向其他运行的程序提供服务的特殊程序,每一个运行中的进程都有指令、数据、栈的内存空间。进程通过系统调用使用内核服务。系统调用会进入内核,让内核执行服务然后返回。所以进程总是在用户空间和内核空间之间交替运行。 我们看到上面加粗的那句话: 2022-01-10 操作系统 MIT_s.081_Lab
MIT-6.s081-Lab2-system calls 在上一个实验中我们使用系统调用编写了一些utilities,在这个实验中我们需要为xv6增加一些系统调用,以便我们理解系统调用是如何工作的,并向我们展示xv6内核的一些内部结构。 我们先来说说什么是系统调用,操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务,主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。应用程序通过系统调用请求操作系统的服务。系统中的各种共享资 2022-01-10 操作系统 MIT_s.081_Lab
Goroutine Goroutine是由Go运行时管理的轻量级线程(协程)。Goroutine和操作系统线程相比,Goroutine的资源占用和使用代价非常小,大小默认是2K字节。Goroutine调度的切换也不在操作系统的内部完成,代价很低。所以一个Go程序可以创建成千上万个并发的Goroutine,而把这些Goroutine按照一定算法放到cpu上执行的程序,就成了Goroutine调度器。 我在前面的文章xv 2021-12-17 Go语言 Goroutine
Go自动管理内存 Go垃圾回收机制垃圾回收(GC,garbage collection)是自动内存管理的一种形式,通常由垃圾收集器收集并适时回收或重用不再被对象占用的内存。所谓垃圾回收,即所有的内存分配都做都会被在运行时记录,同时任何对该内存的使用也都会被记录,然后垃圾回收器会对所有已经分配的内存进行跟踪监测,一旦发现有些内存已经不再被任何人使用,就阶段性地回收这些没人用的内存,当然,因为需要尽量最小化垃圾回收的性 2021-12-16 Go语言 内存管理 Go map
对浮点数精度丢失的一点研究 什么叫精度丢失计算不准确我们看看如下代码: 12345float f;for(int i=0;i<100;i++){ f+=0.1f;}printf("%f\n",f); 上述代码中f的结果本应该是10.000000,但是却输出10.000002,如下图所示。这就是浮点数计算不准确的现象,即精度丢失。 我们打印小数点后更多位数,能看得更清楚。p 2021-12-13 杂文 浮点数
MIT_6.s081_Lab1:Xv6 and Unix utilities 在这个实验中要实现几个用户级别的应用程序,其对应的系统调用在kernel中都已经被实现好了。 sleep本实验要为 xv6 实现 UNIX 程序 sleep; 您的睡眠应暂停用户指定的滴答数。 滴答是 xv6 内核定义的时间概念,即来自定时器芯片的两次中断之间的时间。 我们检查参数,如果出现不是数字的参数就exit(-1),否则进行sleep。代码如下所示: 1234567891011121314 2021-12-12 操作系统 MIT_s.081_Lab
Stanford_CS144_Lab1 该lab要求我们实现一个流重组类,可以将Sender发来的带索引号的字节碎片重组成有序的字节写入到byte_stream。接收端从发送端读取数据,调用流重组器,流重组器对数据进行排序,排序好后写入byte_stream。 值得注意的是,无论是lab0中的byte_stream,还是lab1中的重组器,都有capasity的概念,capasity用于模拟内存,capasity由重组器中未排序的数据和 2021-11-27 计算机网络 standford_cs144_lab