databrains
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
  •   
  •   

Go runtime

Go panic大多数编程语言都提供了异常处理机制,恰恰相反,Go延续了C语言的风格,并未提供异常处理机制。但在Go中,提供了panic异常,从某种意义上说,它也非常接近其他语言的异常处理。 Go语言在编译期间就能捕获大量异常,但是有些异常只能发生在运行期间,比如运行期间的除以0的异常,数组越界错误等。 除了程序本身的问题导致panic异常外,也可以直接在程序里调用panic函数引发panic异常

2022-03-12
Go语言
go map

MIT_6.s081_Lab6_Copy-on-Write Fork for xv6

早期的fork()实现较为“简单粗暴”,会将父进程的物理内存完整拷贝一份,并映射到子进程的内存空间中,这种方式在很多情况下是不必要的,一部分虚拟内存是只读的,对他们进行拷贝是一种浪费,其次,由于进程有时会在调用fork函数之后立即调用exec以载入新的可执行文件,重置地址空间,之前的内存拷贝就完全失去了意义。因此可以用写时拷贝技术来对fork的实现进行优化。对于本来就是只读的虚拟页,父进程和子进

2022-02-24
操作系统
MIT_s.081_Lab

CMU_15-445_PROJECT#2

这个实验2真的是折磨死我了。 Tree Index索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址,在数据十分庞大的时候,索引可以大大加快查询的速度,这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据。 hash table的时间复杂度是$O(1)$。在B+ Tree中,因为它是平衡的,所以它的时间复杂

2022-02-15
数据库
CMU_15-455

CMU_15-445_PROJECT#0&1

写在前面正如CMU 15-445的主讲教授所说,这门课并不会教你如何使用数据库去构建应用程序或网站,也不是教你如何去部署和管理数据库的课,这门课的核心课程是有关数据库管理系统的设计与实现。 PROJECT #0 - C++ PRIMER这个热身实验只是让我们把项目文件下载到本地,配置好相关的git,检验一下自己的C++能力,因此对其简要说明。 在这个项目中,您将实现三个类模板:Matrix、Row

2022-02-03
数据库
CMU_15-455

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
123

搜索

Hexo Fluid