操作系统学习(十四) 、中断描述符表和中断描述符

一、中断描述符表 中断描述符表IDT将每个异常或中断向量分别与它们的处理过程联系起来。与GDT和LDT表类似,IDT也是由8字节长描述符组成的一个数组。与GDT不同的是,表中第一项可以包含描述符。为了构成IDT表中的一个索引值,处理器把异常或中断的向量号*8。因为最多只有256个中断或异常向量,所以IDT无需包含多于256个描述符。IDT中可以含有少于256个描述符,因为只有可能发生的异常或中断才需要描述符。不过IDT中所有空描述符项应该设置其存在位标志为0。 IDT表可以驻留在线性地址空间的
分类: 其他 发布时间: 06-16 19:12 阅读次数: 4

我要上天ssss!!!!!

行不行ssssss
分类: 其他 发布时间: 06-16 19:12 阅读次数: 4

Libevent源码剖析(一)之接口详解

Libevent V2.1版本源码剖析,准备先将提供接口进行分类,根据接口逐步深入源码。 事件集合处理接口(struct event_base) 事件集合处理接口存在两种初始化的方式,一种是直接创建默认的接口,另外一种是根据配置对象创建相应的集合,需要用户额外的维护一个配置对象。 Libevent提供的默认初始化版本: struct event_base *event_base_new(void) Functionality:创建一个新的event_base,为Libevent维护一个事件集合
分类: 其他 发布时间: 06-16 19:12 阅读次数: 4

【转载】挺立在孤独、失败和绝望的废墟上

孤独,没有办法。谁能理解你内心深处的感受呢?谁能和你一起分享成长路上的喜怒哀乐呢?这是一种无奈,更是一种无言的痛苦。 失败,不可避免。成功从来不可能一蹴而就的。所以才有一句话是:失败是成功之母。 绝望,失败、失败还是失败……这是考验我们意志力的时候了,这是我们人生中做出重大抉择的时候了。这个决定将会影响我们以后人生,也会改变我们的人生轨迹。尼采说:“人是一根绳索,架于超人与禽兽之间。那是危险的前进,危险的回顾,危险的战栗与停止,下面是无底的深渊。”来吧!站起来吧!挺立起你的脊梁,绝望在你的字典
分类: 其他 发布时间: 06-16 19:07 阅读次数: 4

练习题12:酒店价格

题目描述 酒店房间的价格录入是通过时间段来录入的,比如10月1日至10月7日800元,10月8日至10月20日500元,请实现以下函数int[][] merge(int[][] dateRangePrices),输入是某个酒店多个日期段的价格,每个日期段(终止日期大于等于起始期)和对应的价格使用长度为3的数组来表示,比如[0, 19, 300], [10, 40, 250]分别表示从某天开始第1天到第20天价格都是300,第11天到第41天价格都是250,这些日期端有可能重复,重复的日期的价格
分类: 其他 发布时间: 06-16 19:07 阅读次数: 4

UDT源码剖析(七)之Packet

CPacket 基础数据结构 ``` class CPacket { public: int32_t& m_iSeqNo; // 序列号 int32_t& m_iMsgNo; // 信息号 int32_t& m_iTimeStamp; // 更新RTT的Timestamp int32_t& m_iID; // 目的地Socket ID char*& m_pcData; // 数据 static const int m_iPktHdrSize; // 头部信息(16字节) protected:
分类: 其他 发布时间: 06-16 19:07 阅读次数: 3

UDT源码剖析(八)之Cache

在UDT源代码中,作者使用了std::vector和std::list组装了一个缓存系统,本来在纠结要不要列出来,没有啥技术含量,不过为了完整性,还是列出来吧... CCache class CCache { private: std::list<T*> m_StorageList; //定义一个链表,链表中的指针指向缓存的对象(真实存储位置) typedef typename std::list<T*>::iterator ItemPtr; //指向链表结点的ite
分类: 其他 发布时间: 06-16 19:07 阅读次数: 5

printf 中的 %.*s

printf("message arrived %.*s\n", length, str); .*代表length 当 str 长度大于等于 length,打印出 str 前 length 的字符 当 str 长度小于 length,打印出整个 str 的字符
分类: 其他 发布时间: 06-16 19:07 阅读次数: 4

UDT源码剖析(十)之Channel

封装UDP SOCKET,使其成为UDT数据的发送通道,所有的UDT SOCKET都通过这种类型来进行数据发送。为了完整性,咱们接着分析哈~ CChannel 基础数据结构: ``` class CChannel { private: int m_iIPversion; // IP version int m_iSockAddrSize; // socket address structure size (pre-defined to avoid run-time test) UDPSOCKE
分类: 其他 发布时间: 06-16 19:07 阅读次数: 5

UDT源码剖析(九)之CCC

这是整个UDT的算法核心:拥塞控制。我也没太搞明白,不过还是打算列出来,理解的不争取的地方,还请多多指正哈~ CCC class CCC { virtual void init() {} //在UDT connection建立起来的时候被调用 virtual void close() {} //在UDT connection关闭的时候被调用 virtual void onACK(int32_t) {} //在收到ACK的时候被调用 virtual vo
分类: 其他 发布时间: 06-16 19:07 阅读次数: 3

UDT源码剖析(十一)之SendQueue And RecvQueue

SendQueue与RecvQueue在代码中与UDP SOCKET相关。在用户将想要发送的数据提交给Buffer之后,由Buffer将数据打包,根据拥塞控制提供的时间计算,在合适的时间提交给SendQueue进行发送。在接收到数据包之后,通过事件驱动的模式通知用户从RecvQueue中拿去数据包。 删除了交会连接模式的代码。 SendQueue与RecvQueue依赖于几个通用的数据结构,先列出来哈,可能会与前面的描述有重复,怕来回查找麻烦,索性全部列出来: CMultiplexer:每个U
分类: 其他 发布时间: 06-16 19:07 阅读次数: 5

UDT源码剖析(十二)之ACKWindow

通过窗口记录发送时间以及ACK接收情况。 CACKWindow class CACKWindow { private: //是三个独立的数组 int32_t* m_piACKSeqNo; // 记录ACK序列号 int32_t* m_piACK; // 记录数据序列号 uint64_t* m_pTimeStamp; //记录ACK的发送时间 int m_iSize; // ACK窗口的
分类: 其他 发布时间: 06-16 19:07 阅读次数: 3

TCP/IP详解V2(六)之TCP协议

TCP输入 tcp_input void tcp_input(m, iphlen) register struct mbuf *m; int iphlen; { register struct tcpiphdr *ti; register struct inpcb *inp; caddr_t optp = NULL; int optlen; int len, tlen, off; register struct tcpcb *tp
分类: 其他 发布时间: 06-16 19:02 阅读次数: 4

安装淘宝npm镜像

1.临时使用 npm --registry https://registry.npm.taobao.org install express 2.持久使用 npm config set registry https://registry.npm.taobao.org 配置后可通过下面方式来验证是否成功 npm config get registry 或 npm info express 3.通过cnpm使用 npm install -g cnpm --registry=https://regis
分类: 其他 发布时间: 06-16 19:02 阅读次数: 4

TCP/IP详解V2(五)之TCP协议

##TCP处理中的辅助函数 ###tcp_template 功能A:为TCP和IP首部创建一个模板 struct tcpiphdr * tcp_template(tp) struct tcpcb *tp; { register struct inpcb *inp = tp->t_inpcb; register struct mbuf *m; register struct tcpiphdr *n; if ((n = tp->t_template) == 0) { m = m_g
分类: 其他 发布时间: 06-16 19:02 阅读次数: 4

微信小游戏flappy bird填坑

1. 在浏览器中写es6语法的js时候,没有bable转译时。有inport和export时,type一定要写成module,而且import js时候一定要写全称。 1 // type的属性设为module 2 <script type="module" src="game.js"></script> 3 4 //引入时要用写全称 5 import {Main} from "./Main.js"; 持续更新
分类: 其他 发布时间: 06-16 19:02 阅读次数: 3

微信小游戏flappy bird开发详解

一.设计 二.创建框架类 微信小游戏中game.js和game.json是必备的两个文件。 首先创建js文件夹中存放base、player、和runtime三个文件夹用来存放相关类,以及一个导演类。 1.base base中存放为基本类,包括变量缓冲器(DataStore)变量缓存器,方便我们在不同的类中访问和修改变量。资源文件加载器(ResourceLoader),确保canvas在图片资源加载完成后才进行渲染。Resources类,以及精灵类(Sprite)精灵的基类,负责初始化精灵加载的
分类: 其他 发布时间: 06-16 19:02 阅读次数: 3

[BZOJ1455] 罗马游戏 (左偏树||并查集)

题目描述 罗马皇帝很喜欢玩杀人游戏。 他的军队里面有n个人,每个人都是一个独立的团。最近举行了一次平面几何测试,每个人都得到了一个分数。 皇帝很喜欢平面几何,他对那些得分很低的人嗤之以鼻。 他决定玩这样一个游戏。 它可以发两种命令: Merger(i, j)。把i所在的团和j所在的团合并成一个团。如果i, j有一个人是死人,那么就忽略该命令。 Kill(i)。把i所在的团里面得分最低的人杀死。如果i这个人已经死了,这条命令就忽略。 皇帝希望他每发布一条kill命令,下面的将军就把被杀的人的分数
分类: 其他 发布时间: 06-16 19:02 阅读次数: 4

使用 typescript 开发 Vue

基础配置: 1. 准备一个使用 vue-cli 生成的项目 2. 使用 npm 一建安装基础配置 npm i -S @types/node typescript vue-class-component vue-property-decorator vuex vuex-class [email protected] // vue-cli 的 webpack 大版本为 3 // 所以不支持 ts-loader 4以上 3. 修改配置文件 3.1 文件 bulid/webpack.base.conf.j
分类: 其他 发布时间: 06-16 19:02 阅读次数: 4

Runloop详解

RunLoop是iOS和OSX开发中非常基础的一个概念,这篇文章将从源码以及应用入手,介绍RunLoop的概念以及底层实现原理。本人看了一下RunLoop的英语源码,以及借鉴部分优秀博客,感谢!读完这篇文章大约15-25分钟,建议先保存一下。 1.RunLoop概念 根据苹果在文档里的说明(苹果关于RunLoop的官方文档) 一般来讲,一个线程只能执行一个任务,执行完就会退出。RunLoop是事件接收和分发机制的一个实现。RunLoop实际上就是一个对象,(比如触摸事件,UI刷新事件,定时器事
分类: 其他 发布时间: 06-16 19:02 阅读次数: 4