自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 管程

在信号量(生产者和消费者模型)中,我们了解了信号量用于同步,互斥的用法,然而,在生产者和消费者模型中,为了实现同步,我们需要将PV操作放在不同进程(线程)中去实现,这大大增加了我们编程的难度以及出错的概率,因此能否将PV操作集中在一个模块中实现?当然有!这就是我们接下来需要讲的管程。mooc课对于管程的介绍如下:通俗一点讲,管程就是将共享变量和对它们的操作集中在一个模块中,这就像我们在写C++类时,

2017-04-30 21:46:28 648

原创 信号量(生产者和消费者模型)

信号量和管程都是操作系统用于同步提供的两种方法,我们将结合生产者与消费者模型对此进行学习。什么是信号量?为了提高系统的并发性,我们引入了多进程,多线程,但是这样子带来了资源竞争,也就是多个程序同时访问一个共享资源而引发的一系列问题,因此我们需要协调多线程对与共享资源的访问,在任意时刻保证只能有一个线程执行临界区代码。为了实现同步,我们可以利用底层硬件支持,也可以利用高层次的编程抽象,信号量和管程属于

2017-04-30 20:08:15 10599

原创 进程切换,创建,加载,等待与退出

进程切换进程状态:一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程。进程状态即体现一个进程的生命状态。在操作系统中,常见的进程状态是三状态模型,也就是就绪,运行,阻塞(等待),它们的关系如下图:当然,对于一个实际的系统,进程的状态及其转换更为复杂。为此我们引入了新建态和终止态构成了进程的五态模型:关于更详细的进程状态点击此处查看。在这里,我们聊一聊进程之间的切换。进程切换,又叫上下文切换

2017-04-29 18:06:22 830 1

原创 构建乘积数组--剑指Offer

题目描述 : 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]* A[1]… A[i-1]* A[i+1]… A[n-1]。不能使用除法这道题如果没有最后一个要求,直观想法就是将数组A中每个数相乘得出结果sum,每次求B[i]只需要sum / A[i]。但是题目不能使用除法,所以这种方法行不通,还有一点就是,如果存在某个A[i]

2017-04-25 16:10:23 578

原创 helloworld背后发生了什么?(CSAPP笔记2)

任何一个学过C语言的同学,第一个程序应该都是写一个“hello world“。我们编辑好一个hello world,一般来说,只需要轻轻一点编译器的“编译”“运行”,屏幕上就会出现一句hello world,然而在这背后都发生了什么?CSAPP在第一章给出了解释:计算机需要将源文件转为可执行目标文件,一般在Linux下,需要执行gcc hello.c -o hello从而生成一个hello可执行文件

2017-04-24 17:00:14 719

原创 计算机系统的基本组成(CSAPP笔记1)

这是在计算机组成原理会讲到的部分内容,计算机的基本组件以及对应的功能如下:为了便于理解,我们做个类比,计算机可以看作是一个工厂,运算器,控制器相当于车间,存储器相当于仓库,输入相当于原料,输出相当于成品,这样子是不是好理解了一点了?hhh

2017-04-24 10:51:02 750

原创 CSAPP笔记(概括)

截取一段书评 这本书的书名叫”Computer Systems: A Programmer’s Perspective”,从程序员的角度去理解计算机系统,也暗示了书中讲的任何内容都会和程序员所做的事情联系起来。就这点看来,书的中文名取的不好。第二章回顾了整数浮点数的二进制表示,以前学过,但是恐怕很多也忘得差不多了。这章感觉最深的是无符号和有符号数,在代码中尤其要注意两种数据计算时上溢下溢的问题。

2017-04-24 10:16:14 874

原创 树中两结点的最低公共祖先(C++实现)

题目是,输入两个树结点,求它们的最低公共祖先首先,要说明的是,这是一组题目,根据剑指Offer上所讲的,这道题可能会分好几种情况,因此,如果在面试时候遇到,我们需要和面试官沟通,而不是一上来就写代码。1. 如果给定树是二叉搜索树二叉搜索树(又叫二叉排序树),中序遍历是可以得到有序序列的,因此,我们可以利用这个性质来解题。假设给定的两个树结点为4,1,根据图示,显然3为最低公共祖先; 假设给定的两

2017-04-23 22:58:50 1745 1

原创 Linux下task_struct

进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。 在Linux 中每一个进程都由task_ struct 数据结构来定义. task_ struct就是我们通常所说的PCB.她是对进程控制的唯一手段也是最有效的手段. 当我们调用fork()

2017-04-13 16:10:32 364

原创 了解程序,进程和线程

进程是OS处于执行状态程序的抽象1.程序 = 文件(静态可执行文件)2.进程 = 执行中的程序 = 程序 + 执行状态3.同一个程序多次执行对应为不同的进程进程执行需要的资源内存:保存代码和数据CPU:执行指令线程线程是进程的一部分,用来描述指令执行流状态,它是进程中指令执行流的最小单元,是CPU调度的基本单位。

2017-04-11 18:23:09 367

原创 RAII和智能指针的实现

RAII在C++effective一书中讲到,RAII是“Resource acquisition is initialization”,直译为“资源获取就是初始化”。它是基于这样的原理,栈的变量会自动销毁,(自定义类型对象会调用析构函数)。它是将管理资源变为管理对象,将资源封装成类,利用构造函数来获取并初始化资源,析构函数来释放资源,从而保证资源的正确获取,初始化以及释放。从而避免了因此异常等其他

2017-04-05 12:14:30 2138

转载 linux下vim配置

我的vim配置主要有以下优点:1.按F5可以直接编译并执行C、C++、java代码以及执行shell脚本,按“F8”可进行C、C++代码的调试2.自动插入文件头 ,新建C、C++源文件时自动插入表头:包括文件名、作者、联系方式、建立时间等,读者可根据需求自行更改3.映射“Ctrl + A”为全选并复制快捷键,方便复制代码4.按“F2”可以直接消除代码

2017-04-04 20:41:48 255

const的一些操作

const的一些操作

2016-03-04

空空如也

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

TA关注的人

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