随笔分类 -  计算机操作系统

摘要:一、消息队列的特性 1.可靠性传输 这个特点可以说是消息中间件的立足之本,对于应用来说,只要成功把数据提交给消息中间件,那么关于数据可靠传输的问题就由消息中间件来负责。 2.不重复传输 不重复传播也就是断点续传的功能,特别适合网络不稳定的环境,节约网络资源。 3.异步性传输 异步性传输是指,接受信息 阅读全文
posted @ 2018-12-04 16:43 小时候挺菜 阅读(199) 评论(0) 推荐(0) 编辑
摘要:一、小故事 有一天,产品跑来说:“我们要做一个用户注册功能,需要在用户注册成功后给用户发一封成功邮件。” 小明(攻城狮):“好,需求很明确了。” 不就提供一个注册接口,保存用户信息,同时发起邮件调用,待邮件发送成功后,返回用户操作成功。没一会功夫,代码就写完了。验证功能没问题后,就发布上线了。 线上 阅读全文
posted @ 2018-12-04 16:24 小时候挺菜 阅读(179) 评论(0) 推荐(0) 编辑
摘要:一、伪共享的定义: 伪共享的非标准定义为:缓存系统中是以缓存行(cache line)为单位存储的,当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。 二、CPU缓存机制 CPU 缓存的百度百科定义为: CPU 缓存(Cache Memory)是位于 阅读全文
posted @ 2018-11-26 20:30 小时候挺菜 阅读(214) 评论(0) 推荐(0) 编辑
摘要:阅读经典——《深入理解计算机系统》08 本文将介绍存储器层次结构以及局部性对程序性能的影响。 什么是存储器层次结构 这个词大家也许并不陌生,计算机中的存储器从寄存器、缓存到内存、硬盘,形成了一个层次结构。为什么不用单一的一种存储设备,比如只用硬盘呢?因为每一种存储设备都有它的优缺点,硬盘虽然存储空间 阅读全文
posted @ 2018-11-26 20:29 小时候挺菜 阅读(259) 评论(0) 推荐(0) 编辑
摘要:之前遇到一个问题,信号量和互斥锁的区别是什么。一时忘了思考,今天才想到这个问题,翻阅知乎和stackoverflow,理解了之后做简单整理 一、定义 mutex,互斥锁,用于序列化对一部分可重入代码的访问,这些代码不能由多个线程同时执行 semaphore,信号量,将共享资源的并发用户数限制为最大数 阅读全文
posted @ 2018-10-20 16:52 小时候挺菜 阅读(2376) 评论(0) 推荐(0) 编辑
摘要:一、 Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源 阅读全文
posted @ 2018-10-12 11:04 小时候挺菜 阅读(801) 评论(0) 推荐(1) 编辑
摘要:一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和 阅读全文
posted @ 2018-09-25 14:49 小时候挺菜 阅读(1977) 评论(0) 推荐(0) 编辑
摘要:动态链接库、静态库、import库区别 动态链接库(Dynamic Linked Library): Windows为应用程序提供了丰富的函数调用,这些函数调用都包含在动态链接库中。其中有3个最重要的DLL,Kernel32.dll,它包含用于管理内存、进程和线程的各个函数;User32.dll,它 阅读全文
posted @ 2018-09-25 09:36 小时候挺菜 阅读(622) 评论(0) 推荐(0) 编辑
摘要:编写运行的快的程序有三个因素:①选择合适的算法和数据结构;②理解编译器的能力,使用有效的方式让编译器能进行优化;③对于运算量特别大的程序,可能还需要进行任务分解。在这一过程中可能还需要对程序的可读性和运行速度进行权衡。 在阅读这一章节的过程中花费了大量的时间对我自己的自动办公软件进行了优化,算是学以 阅读全文
posted @ 2018-09-13 19:15 小时候挺菜 阅读(1628) 评论(0) 推荐(0) 编辑
摘要:数组简介 如果各位猿友是一路跟着LZ看到这里的,那么数组的定义就非常简单了,它就是一个相同数据类型的数据集合。数组存储在一系列逻辑上连续的内存块当中,之所以说是逻辑上连续,是因为整个内存或者说存储器本身就是逻辑上连续的一个大内存数组。如果我们用Java语言的类型来表示我们的存储器的话,可以看做是by 阅读全文
posted @ 2018-09-11 20:01 小时候挺菜 阅读(5870) 评论(0) 推荐(1) 编辑
摘要:栈帧的结构 倘若我们要想搞清楚过程的实现,就必须先知道栈帧的结构是如何构成的。栈帧其实可以认为是程序栈的一段,而程序栈又是存储器的一段,因此栈帧说到底还是存储器的一段。那么既然是一段,肯定有两个端点,这个不需要LZ再普及了吧。 这两个端点其实就是两个地址,一个标识着起始地址,一个标识着结束地址,而这 阅读全文
posted @ 2018-09-11 20:00 小时候挺菜 阅读(6498) 评论(1) 推荐(3) 编辑
摘要:条件码寄存器 这个子标题在之前就提到过,条件码寄存器与普通的寄存器不同,它们都是1位寄存器,换句话说,它们当中的值只有0和1。当有算术与逻辑操作发生时,这些条件码寄存器当中的值会相应的发生变化,这算是比较神奇的地方吧。 书中列出了四种常用的寄存器,它们的名字与作用分别如下所述,以下是LZ的理解。 C 阅读全文
posted @ 2018-09-11 19:58 小时候挺菜 阅读(795) 评论(0) 推荐(1) 编辑
摘要:我们先来看看这些指令的大致介绍,如果各位看过上一章的话,会发现这里的指令有的会有些眼熟,但是它们的作用却截然不同。以下是书中的一张概图。 第一个指令有些眼熟吧,它就是我们上一章当中的imul乘法指令的双字形式。不过可以看出,这里的imull指令已经完全变了味道,它将结果存入两个寄存器。接下来,我们来 阅读全文
posted @ 2018-09-11 09:14 小时候挺菜 阅读(351) 评论(0) 推荐(0) 编辑
摘要:eal指令是非常神奇的一个指令,它可以取一个存储器操作数的地址,并且将其赋给目的操作数。如果用C语言当中来对应的话,它就相当于&运算。 比如对于leal 4(%edx,%edx,4),%eax这条指令来讲,我们假设%edx寄存器的值为x的话,那么这条指令的作用就是将 4 + x + 4x = 5x 阅读全文
posted @ 2018-09-10 15:53 小时候挺菜 阅读(1266) 评论(0) 推荐(0) 编辑
摘要:mov指令 mov指令的作用是将源操作数S中的数据复制到目的操作数D中,mov指令有一个数据格式和两个操作数,因此一般的形式为[movx S D]。其中x为数据格式,S为源操作数,D为目的操作数。 这里举一个简单的例子,比如我们有一条指令为movl %edx %eax。那么它的执行过程就如下图所示。 阅读全文
posted @ 2018-09-10 15:32 小时候挺菜 阅读(531) 评论(0) 推荐(0) 编辑
摘要:无符号数加法 对满足0 =< x, y<2w的x和y有: 例如:无符号数65535 + 1 为10000000000000000,由于超过16位,所以截断后0~15位都是0,因此结果为0 结果为0 补码加法运算 补码加法运算就是先按照无符号加法进行运算,而后在进行无符号和有符号的转换 对满足 -2w 阅读全文
posted @ 2018-09-10 11:17 小时候挺菜 阅读(540) 评论(0) 推荐(0) 编辑
摘要:扩展 无符号数扩展:将一个无符号数转换为一个更大的数据类型,我们只需要简单的在二进制序列前面添加 0 即可 有符号数的扩展:将其补码数字转换为一个更大的数据类型,我们需要在开头添加符号位,即在前面补符号位 如果我们原始位为[xw-1 , xw-2 , … , x2 , x1 , x0],那么扩展k位 阅读全文
posted @ 2018-09-10 10:52 小时候挺菜 阅读(310) 评论(0) 推荐(0) 编辑
摘要:有符号数转换为无符号数 比较两个等式: (1) (2) 我们计算(1)-(2) = xw-12w (3) 我们可以得到 :B2U = xw-12w + B2T 将x用T2B替代,则:B2U(T2B)= T2U = x + xw-12w 位xw-1决定了x是否为负 据此 我们可以得到公式: 相应的转换 阅读全文
posted @ 2018-09-10 10:37 小时候挺菜 阅读(6731) 评论(0) 推荐(0) 编辑
摘要:无符号数的编码 假设有一个w位的无符号整数,我们可以将位向量写成[xw-1 , xw-2 , … , x2 , x1 , x0]。其中每个xi都取值为0或1,我们用一个函数B2Uw(Binary to unsigned,长度为w)来表示: 函数B2U将一个长度为w的0、1串映射到非负整数: 对于一个 阅读全文
posted @ 2018-09-10 10:02 小时候挺菜 阅读(595) 评论(0) 推荐(0) 编辑
摘要:第十二章 并发编程 构造并发程序的方法:进程,I/O多路复用,线程 基于进程的并发编程 服务器作为父进程,每当一个客户端请求链接时,服务器就创建一个子进程来与之通信 优点:共享文件表,但是不共享用户地址空间。也就是说,一个进程不可能不小心覆盖另一个进程的虚拟内存 缺点:进程间通信相对困难,进程的控制 阅读全文
posted @ 2018-08-27 09:43 小时候挺菜 阅读(711) 评论(0) 推荐(0) 编辑