Home

OS内核(xv6)探究-分段&分页

分段与分页 分段和分页是现代操作系统管理和使用内存的方式,一般需要操作系统(软件)配合CPU(硬件)一起来实现分段和分页的功能。我的理解,分段的主要目的是为了实现对内存的保护,即操作系统的保护模式;分页的主要目的是为了提高对内存的利用率,减少内存碎片。 分段是程序员能在开发过程中够感知到的部分,例如我们常说的代码段(TEXT段),数据段(DATA段),堆和栈都是段的概念,还有CS,DS,...

OS内核(xv6)探究-系统调用

内核态和用户态 计算机在加载操作系统之后,再继续执行任何指令的时候,都会处在某种特权级下(privilege)。例如在Linux下,可能会有ring0,ring1,ring2,ring3等几种状态,这些状态可以简单的分成用户态和内核态两种。我们写的上层应用的代码大多数情况运行在用户态,当我们的程序需要执行一些特殊的任务的时候,例如:访问文件,发起网络请求,向屏幕输出文字,fork一个子进程...

OS内核(xv6)探究-前言

Mark!!! 开始学习课程:操作系统-MIT-xv6 通过前面学习nand2tetris的经历,我发现learning by doing是一个非常好的学习方式。nand2tetris完成了一个简单的计算机,有硬件部分,也有软件部分和操作系统部分。但是这个操作系统还远远称不上是操作系统,他只是一个简单的基础库,负责内存管理和屏幕绘制等简单的工作。所以这次我们要尝试探究一个更能称得上是现...

Node.js学习笔记

node.js的优缺点 优势: 高并发能力:事件驱动,非阻塞I/O模式 高性能:基于Chrome V8 JavaScript引擎 统一的技术栈:使用 js 一门语言就可以开发web的前后端 缺点: 难以支持CPU密集型的任务 代码自由度高,规范性差 node.js的原理 Node.js 使用事件驱动, 非阻塞I/O 模型,非常适合运行数据密集...

美团外卖客户端容器化架构的演进

这是我在美团技术团队发表的技术博客:外卖客户端容器化架构的演进

静态链接分析

注:本篇内容基本参考自:Mach-O 与静态链接。然后自己做一些上手实践和分析,用来加深对静态链接过程的理解。 材料准备 首先手写一个简单的C程序:a.c,b.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 /* a.c */ #include <stdio.h> extern int gl...

x86_64汇编下的函数调用过程

材料准备 首先手写一个简单的C程序:main.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #include <stdio.h> void empty(); i...

计算机发展史

发展阶段 【计算】 –> 【计算 + 存储】 –> 【可编程化计算 + 存储】 –> 【人工智能 + 存储】 早期计算机 简单的加减乘除算数运算工具,目的是利用工具辅助人工计算 1、纯手动工具:结绳记事、算盘、计算尺 算盘 2、手动机械工具: 1623年,德国科学家施卡德建造出世界已知的第一部机械式计算器,成为计算机世代之父,这部机械改良自时钟的齿轮技术...

C语言拾遗

short, long 1 2 short int x; long int y; short 和 long 用于修饰整型,和 int 一起使用,但使用时 int 关键字可以省略。 short, int, long 在不同的机器架构下占用的长度不同,但一般遵循以下限制:short长度小于等于int,int长度小于等于long,一般short长度至少需要16位,long长度至少需要32位...

从0到1构建计算机(12/12)--收获和总结

完成Nand2Tetris这门课,我大概用了4个多月的时间;完成从0到1构建计算机系列博客,大概用了5个多月的时间(课程和博客时间上有交集)。期间也因为工作较忙的原因,挂起过若干次,很高兴最后还是坚持完成了。最后在这里再次做一些总结,算是对这段学习过程的一个暂时的收尾。 之所以说是暂时的收尾,是因为我觉得课程中很多知识点自己理解得还不到位,很多精华的思想也没有完全get到。这门课程是一门基...