计算机系统
吾皇斯巴达
存储研发工程师,搜索sci-geek关注.
展开
-
数据包的超时管理:TTL
TTL的起源在各种需要进行数据包传送的场景下,数据包一般都有一个超时管理机制:Time To Live,即TTL。为什么需要这么一个机制呢?举个例子,在IP协议发送数据包的时候,可能会经过多个路由转发环节。若其中的某个环节出了问题,就可能造成这个数据包一直在数个路由器中反复转发。这样既不能正确到达目的地,也无法及时释放这些资源。如何来避免这种情况发生呢?给每个数据包都加上一个超时时间即可,...原创 2020-01-10 20:54:39 · 1839 阅读 · 0 评论 -
事件驱动设计模式
在进行事件方面的代码编写中,Reactor设计模式是经典、重要的一种设计模式。参考【1】 《Pattern-Oriented Software Architecture, Volume 4: A Pattern Language for Distributed Computing》,第11章《Reactor》【2】 《Redis设计与实现》 第12章 《事件》【3】 《设计模式》...原创 2019-12-24 11:19:10 · 806 阅读 · 0 评论 -
函数的执行、调用、堆栈与递归
前提先需要简要叙述一下一个C程序的运行流程。我们知道基本的冯诺依曼计算机体系:CPU–内存–外存。CPU中具有一些寄存器可以用来暂存要操作的对象,并存储处理结束后的数据。程序编译完成之后,当内核通过exec函数来执行C程序是,在调用main前会先调用一个特殊的启动例程,该例程将会将段页式内存管理数据总线、控制总线参考【1】 UNIX环境高级编程【2】 汇编语言,第三版...原创 2019-12-17 16:30:39 · 257 阅读 · 0 评论 -
C/C++基础:函数/指针/多态
变量内存地址与指针我们知道内存是一块能够存储数据的区域。从本质上来讲,存储器被划分为若干个存储单元,每个存储单元都有一个固定的编号,即内存地址。计算机的最小信息单位为1bit,但是作为内存的最小处理单位是字节,即8bit(【1】p4)。变量的存取方式int a = 100;如上所示,在声明了一个int型的变量。此时,编译器会为其申请一块int大小的内存区域,并在这块内存区域中放入值100...原创 2019-12-17 11:06:52 · 677 阅读 · 0 评论 -
实现一个任务调度系统
在看RAID代码的时候,对于多种不同的后台任务,采用了不同优先级的处理方法.而对于其中的某个后台任务(例如巡检), 又采用了一种动态的速率调整的策略. 这种调度的实现是很有意思的, 不禁想着参考这种实现方式,来自己实现一个任务调度系统....原创 2019-12-05 22:33:39 · 517 阅读 · 0 评论 -
进程间通信
问题收集为什么需要专门考虑进程间通信这一问题?解决这个问题的发展历史是什么样的?进程间通信的一般处理方法有哪些?都是如何实现的?各自的优劣在哪里?适用场景在哪里?问题的引出:如何使用户态的进程进行通信众所周知,用户态的进程相互隔离,都具有独立的地址空间,因此无法进行直接通信,需要进入内核态进行访问。此处的访问,其实本质上是虚拟地址和物理地址之间的重新映射的关系。当然实现起来是十分复...原创 2019-11-16 00:15:23 · 240 阅读 · 0 评论 -
Linux内存管理
问题收集若能申请到内存,则直接申请;若无可用内存,则加入链表等待的机制是否存在?基于1的需求,是否能够通过上下文传递来更加精细化地管理整个结构体的内存分配情况?Linux是否有类似的实现?Linux的内存管理...原创 2019-11-15 23:20:12 · 122 阅读 · 0 评论 -
汇编学习:从环境配置到函数调用
Mac下的环境配置安装HomeBrew;使用homebrew安装DOSBox:brew install DOSBox;在某个位置创建一个文件夹用于存放调试程序,假设放到/User/DOSBox下,下载DEBUG.EXE, LINK.EXE,MASM.EXE, LIB.EXE,将其放入其中;打开DOSBox,挂载个人文件夹:mount c /User/DOSBox;dir可看到当前目录...原创 2019-11-14 00:15:09 · 329 阅读 · 0 评论 -
网络是怎样连接的
问题收集为什么要有路由器?路由器的本质功能是什么?如果没有路由器如何收发包?路由器是如何收发包的?数据包在从用户到服务器,中间经历了哪几个部分?集线器、交换机和路由器的作用分别是什么?区别有哪些?网关是什么?作用是什么?是如何实现的?IP表与MAC表的内容有哪些?增删改查的时机有哪些?以太网是什么?端口号的作用是什么?是否有上限?是否固定?如何与全互联网进行约定?TCP协议的握手标...原创 2019-11-10 17:38:36 · 246 阅读 · 1 评论 -
计算机是如何运行的:从CPU到内存管理
CPU的组成内存的组成内存的硬件结构内存的物理地址编码内存的寻址内存管理:分段什么是内存分段为什么发明了分段式内存管理分段内存管理是如何实现的如何使用分段内存管理CPU如何进行内存寻址CS:IP结构:内存管理:分页什么是内存分页页框与寻址分页管理的好处是什么分页管理与分段管理的区别是什么?CPU如何对一个分页管理的内存系统进行寻址?中断: 缺页中断什么是缺页中...原创 2019-11-03 20:20:13 · 5087 阅读 · 0 评论 -
《操作系统精髓与设计原理》第七章:内存管理
基本概念在单道程序设计中(即同时只允许一个进程在处理器中执行),内存被分为两个部分,一部分供操作系统使用,一部分供当前执行的用户程序使用。而在多到程序设计中,CPU采用某些调度方式允许多个进程在一定意义上同时执行(当然在实际的围观角度来看并不是同时执行),因此用户程序使用的内存区域需要被进一步细分管理,从而满足多个进程的存放要求。这便叫内存管理。1.内存管理需要满足哪些要求?主要包括以下几...原创 2019-06-23 21:13:10 · 1187 阅读 · 0 评论 -
虚拟内存/用户空间与内核空间/MMap与MUnmap
在涉及到IO的开发中,我们经常看到零拷贝(zero copy)、内存映射(memroy map, 以下简称mmap)等技术被用于提高IO效率,本文将介绍这两种技术的基本原理,说明它们是如何提高IO效率的。相关概念Zero copy和mmap涉及到操作系统中的一些基本概念,在了解它们的工作机制前,我们先来复习一下这些概念。虚拟内存(virtual memory space)进程对内存...转载 2019-06-22 15:11:11 · 996 阅读 · 0 评论 -
Linux用户态与内核态
Table of Contents一、 Unix/Linux的体系架构二、用户态和内核态的切换三、总结 一、 Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必...转载 2019-01-28 22:22:55 · 235 阅读 · 0 评论