自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (1)
  • 收藏
  • 关注

原创 《现代操作系统》阅读笔记——多处理机系统

多处理机三种模型共享储存器多处理机消息传递多计算机广域分布式系统多处理机的构造高速缓存一致性协议为了缓解多个DUP对总线的争夺,为每个CPU添加了高速缓存如果CPU试图在一个或多个远程高速缓存中写入一个字,总线硬件检测到写,并把一个信号放到总线上通知所有其它的高速缓存。如果其他高速缓存有个"干净"的副本,也就是同存储器内容完全一样的副本,那么它们就可以丢弃该副本并让写......

2018-11-26 21:54:57 293

原创 《现代操作系统》阅读笔记——输入输出

I/O硬件原理I/O设备块设备以块为单位传递信息所有块都可以独立于其他块读写字符设备以字符为单位传递数据不可寻址内存映射I/O每个设备都有一个设备控制器,每个控制器都有几个寄存器与CPU通信通过读取和写入这些寄存器,操作系统可以控制和感知设备状态控制寄存器被映射到内存空间,并且确保该内存地址不会和虚拟内存重叠优点可以直接使用C等高级语言编写I/...

2018-11-25 20:00:50 218

原创 《现代操作系统》阅读笔记——文件系统

文件系统的使用文件的命名对于Unix系统 ,文件的拓展名只是一种约定,并不给操作系统传递什么信息在Unix中,拓展名甚至可以有多个,如 homepage.hitml.zip 表示一个被压缩过的HTML格式的网页文件对于Windows系统,文件拓展名是有实际意义的,用户可以在操作系统中注册拓展名,并规定那个程序打开这个拓展名文件类型普通文件ASCII 文件可以显示,...

2018-11-24 17:32:41 1039 1

原创 数据结构与算法总结——常见排序算法

本文包含的排序算法冒泡排序插入排序选择排序归并排序快速排序希尔排序堆排序桶排序基数排序本文关于C++ 的知识点尽量使用vector代替数组尽量使用std::move代替传值++i 比 i++ 更高效,后者需要复制出一个临时副本来完成当前操作comparator(比较器),当数据类型本身不支持比较(如自定义类),而你又不想改变这个数据类型本身,于是需要从外部传入一...

2018-11-21 21:49:36 148

原创 数据结构与算法总结——二叉查找树及其相关操作

我实现了如下操作插入,查找,删除,最大值树的高度,子树大小二叉树的范围和,范围搜索树的前序,中序,后序三种遍历rank前驱值在这一版本的代码中,我使用了类模板将接口与实现分离,在这之中,遇到了许多问题:当类模板和实现分别在两个文件中实现时,需要直接包含实现文件而不是模板文件实现文件中,返回类中自定义的数据结构(如结构体)前要加上类名,并且要在前面加入typename...

2018-11-21 16:34:34 163

原创 Visual Studio如何检查内存泄漏

Clion中有专门检查内存泄漏的选项,而VS中却没有。但是我们可以通过下面的方法检查:在程序的开头加上下面三行:#define CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h>在main函数结尾,也就是return 0 的上一行加上下面代码:_CrtDumpMemoryLeaks(...

2018-11-18 17:48:58 2231

原创 左值,右值和引用

左值与右值左值是长久存在的值, 如 arr, arr[x], *pt右值是临时存在的值, 如 x+y, “foo", 2最简单的判断方式就是能否用取地址符&操作无法对右值进行更改操作,也无法对右值赋值引用左值引用声明时在变量的类型后放置一个&来进行。如string& rstr= str;注意不能将一个右值赋值给左值引用, 如st

2018-11-17 17:42:55 104

原创 C++类构造函数为什么要使用初始化列表?

class Class {int a;double b;string s;void execute();};\\第一种写法Class::Class(){ a = 0; b = 1.0; s = "stirng";}\\第二种写法Class::Class():a(0), b(1.0), s("string"){ }上面的第一种初始化方法是我以前习惯的写法...

2018-11-17 15:03:47 702

原创 《现代操作系统》阅读笔记——内存管理

地址重定位最开始没有重定位,程序直接使用物理地址任然被微波炉,洗衣机等嵌入式设备使用缺点是一次只能执行一个程序,否则会程序地址起始位置会变动静态重定位为了解决只能运行一个程序的问题,提出了静态重定位的方法,在每次程序载入内存时,在为每个地址加上程序起始地址不可被多个程序共享,因为每个程序的其实地址不同,计算出来的绝对地址也不同动态重定位不再是程序载入内存时重定向,...

2018-11-15 12:53:07 276 1

原创 《现代操作系统》阅读笔记——调度和死锁

调度是操作系统的最底层何时需要调度创建新的进程时运行父进程还是子进程进程退出时进程阻塞时I/O中断结束后调度算法目标给所有进程公平的CPU份额能够保证按照规定的策略执行比如某些安全控制进程必须能够得到执行保持系统的每个部分都忙碌两种调度方式抢占式一个进程最多运行n ms, 如果还没运行结束,就会被始终中断,调用别的程序非抢占......

2018-11-13 00:18:07 138

原创 《现代操作系统》阅读笔记——进程和线程

进程和程序的区别程序只是一连串待执行的指令进程包括程序,输入输出和和当前的状态(寄存器里的值,PC值,打开的文件等)导致进程被创建的事件系统初始化正在运行的程序调用了fork一个用户请求创建一个新进程一个批处理程序的初始化守护进程是在后台运行不受终端控制,无需用户输出的进程 , 周期性地执行某种任务或等待处理某些发生的事件一般在操作系统启动时创建如网络服务进程...

2018-11-11 15:38:48 205

原创 《现代操作系统》阅读笔记——操作系统梗概

操作系统的主要功能隐藏复杂的底层硬件操作,为用户程序提供抽象管理计算机资源超线程对于一般的CPU, 虽然有多线程的概念,但是实际上CPU中每一时刻还是只有一个线程在执行的我们知道现代CPU是流水线执行的,并且每个流水线阶段有多个执行单元,比如专门执行浮点运算的,因此在不同任务重很有可能有些执行单元会不在工作。而超线程技术就是让闲着的那些执行单元去做另一个线程的工作。这样就实...

2018-11-11 14:15:47 921

原创 Git常用命令

初始化git仓库git init克隆现有远程仓库git clone [-b branch] git@server:directory [my_directory]第一个可选参数为要拷贝的分支,默认为master分支最后一个可选参数可指定要拷贝到的本地目录,默认为当前目录git@server:directory其实就是要拷贝的repogit pull git@server:...

2018-11-09 14:12:05 247

转载 operator++()和operator++(int)的区别

转自: https://blog.csdn.net/piaopiaohu123/article/details/7333771class UPInt {public: UPInt& operator++(); // ++ 前缀 const UPInt operator++(int); // ++ 后缀 UPInt& operator- -(); // – 前缀 cons...

2018-11-08 21:15:48 4918

原创 int()是什么?

今天读代码读到这么一条代码datum = std::vector<int>(size, int());一开始我是看不懂的,为什么int后面要加括号?结果上网查阅,才明白原来int()的意思是调用了int的默认构造函数,所以返回值应该是0. 这个可以类比一个类,类名 +()就是调用这个类的默认构造函数。...

2018-11-08 19:36:37 5979 1

原创 《现代操作系统》阅读笔记——竞争与加锁

竞争发生在当多线程同时访问同一个内存,各个线程执行的顺序有交叉时。一般来说,局部变量和参数由于对每个线程是独立的,不会发生竞争。竞争通常发生在全局变量,堆变量等上。解决竞争最简单的方法就是进入临界区(开始读写公共内存)时屏蔽掉中断,但是这种方法对于多CPU无效,因为该内存可能会被别的CPU中的程序访问。现在更好的方法是屏蔽那片内存的访问(以前是通过锁住总线解决的)。但是还是会有问题,因为这样...

2018-11-04 22:31:55 1660

原创 理解Peterson算法

先上算法代码:int turn;int interested[2];void enter_region(int process)//在进入临界区前调用{ int other = 1 - process; interested[process] = true; turn = process; while ( turn == process && interested...

2018-11-04 01:04:21 6580 1

原创 dup和dup2函数的小理解

int dup(int fd); int dup2(int fd, int fd 2);dup的参数是一个文件描述符,指向一个文件(stdin,stdout等也是特殊的文件)。返回的也是一个文件描述符(当前还未被使用的最小的描述符编号),这个描述符和fd指向同一个文件。也就是说,当你当你用write向返回的文件描述符写入时,也相当于向fd指向的文件写入。dup2多了一个参数,这个参数让...

2018-11-03 20:38:32 301

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除