- 博客(153)
- 收藏
- 关注
原创 《Linux内核设计与实现》读书笔记之进程地址空间
1.进程的内核区域包含各种内存对象 进程的内核区域包含各种内存对象,比如:1.可执行文件代码可以包含各种内存映射,称为代码段(text section)。2.可执行文件的已初始化全局变量的内存映射,称为数据段(data section)。3.包含未初始化全局变量,也就是bss段的零页(页面中的信息全部为0值,所以可以用于映射bss段等目的)的内存映射。4.
2015-06-08 18:04:42
941
原创 《Linux内核设计与实现》读书笔记之内存管理
1.页 内核把物理页作为内存管理的基本单位,MMU(内存管理单元)以页为单位来管理系统中的页表,从虚拟内存的角度来看,页就是最小单位。 内核用struct page结构来标识系统中的每一个物理页,它的定义如下: flag域用来存放页的状态(是不是脏的,是不是被锁定在内存中等等)。_count表示这一页被引用了多少次,当次数为0时,表示此页没有
2015-06-04 11:34:45
978
原创 《Linux内核设计与实现》之中断与中断处理程序
1.中断的概念 中断本质上是一种特殊的电信号,由硬件设备发向处理器。处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由OS负责处理这些新到来的信号。 从物理学的角度看,中断是一种电信号,有硬件设备产生,并直接送入中断控制器的输入引脚上。然后再由中断控制器向处理器发送相应的信号。处理器一经检测到此信号,便中断自己的当前工作转而处理中断。伺候处理器会通知操作系统已经
2015-06-01 10:53:02
895
原创 《Linux内核设计与实现》读书笔记之系统调用
1.系统调用的概念 为了和用户空间上运行的进程进行交互,内核提供了一组借口。透过该接口,应用程序可以访问硬件设备和其他操作系统资源。这组借口在应用程序和内核之间扮演着使者的角色。同时,这组接口也保证了系统稳定可靠,避免应用程序肆意妄行,惹出麻烦。Linux系统的系统调用作为C库的一部分提供,其调用过程中的实例如下图所示: 从程序员的角度看,系统调用无关紧要,他们只需
2015-05-30 10:55:31
897
原创 《Linux内核设计与实现》读书笔记之进程管理
1.进程描述符及任务结构 Linux内核把进程存放在叫做任务队列的双向循环链表中。链表中的每一项都是类型为task_struct,称为进程描述符的结构。进程描述符包含一个具体进程的所有信息。 task_struct相对较大,在32位的机器长,它大约有1.7K字节。进程描述符中的数据能完整的描述一个正在执行的程序:它打开的文件、进程的地址空间、挂起的信号、进程的状态,还有其他
2015-05-29 16:41:11
1005
1
原创 Pascal's Triangle II
题目描述:Given an index k, return the kth row of the Pascal's triangle.For example, given k = 3,Return [1,3,3,1].思路分析:依次计算每一行的值,把它们存在同一个数组里。代码:class Solution{ public: vector
2015-05-27 15:27:18
1014
原创 Pascal's Triangle
题目描述:Given an unsorted array of integers, find the length of the longest consecutive elements sequence.For example,Given [100, 4, 200, 1, 3, 2],The longest consecutive elements sequence
2015-05-26 10:07:47
617
原创 LeetCode:Permutations
题目描述:Given a collection of numbers, return all possible permutations.For example,[1,2,3] have the following permutations:[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].
2015-05-25 16:37:24
554
原创 LeetCode:Spiral Matrix
题目描述:Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.For example,Given the following matrix:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8,
2015-05-19 18:21:14
526
原创 LeetCode:Interleaving String
题目描述:Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.For example,Given:s1 = "aabcc",s2 = "dbbca",When s3 = "aadbbcbcac", return true.When s3 = "aadbb
2015-05-19 16:38:49
545
原创 LeetCode:Candy
题目描述:There are N children standing in a line. Each child is assigned a rating value.You are giving candies to these children subjected to the following requirements:Each child must have
2015-05-19 15:30:44
616
原创 LeetCode:Word Search
题目描述:Given a 2D board and a word, find if the word exists in the grid.The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or
2015-05-18 17:01:00
674
原创 LeetCode:Rotate Array
题目描述:Rotate an array of n elements to the right by k steps.For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].思路分析:将数组分为左右两部分,先将左右两部分各自翻转,最后再将整个
2015-05-14 16:29:28
1316
原创 LeetCode:Reverse Bits
题目描述:Reverse bits of a given 32 bits unsigned integer.For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary a
2015-05-14 15:59:54
556
原创 LeetCode:House Robber
题目描述:You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adj
2015-05-14 15:31:16
592
原创 LeetCode:Binary Tree Right Side View
题目描述:Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.For example:Given the following binary tr
2015-05-12 16:50:10
980
原创 LeetCode:Number of Islands
题目描述:Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. Y
2015-05-12 16:14:35
913
原创 LeetCode:Bitwise AND of Numbers Range
题目描述:Given a range [m, n] where 0 For example, given the range [5, 7], you should return 4.代码:class Solution{ public: int rangeBitwiseAnd(int m,int n) { int i = 0; while(m
2015-05-12 15:25:21
805
原创 LeetCode:Happy Number
题目描述:Write an algorithm to determine if a number is "happy".A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of
2015-05-11 16:37:43
949
原创 LeetCode:Remove Linked List Elements
题目描述:Remove all elements from a linked list of integers that have value val.ExampleGiven: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6Return: 1 --> 2 --> 3 --> 4 --> 5思路分析:在链表头节点
2015-05-11 16:15:37
815
原创 LeetCode:Count Primes
题目描述:Description:Count the number of prime numbers less than a non-negative number, nclick to show more hints.思路:利用厄拉多塞筛法。具体操作:先将 2~n 的各个数放入表中,然后在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,
2015-05-11 15:56:28
1206
转载 epoll的ET和LT模式详解
从man手册中,得到ET和LT的具体描述如下EPOLL事件有两种模型:Edge Triggered (ET)Level Triggered (LT)假如有这样一个例子:1. 我们已经把一个用来从管道中读取数据的文件句柄(RFD)添加到epoll描述符2. 这个时候从管道的另一端被写入了2KB的数据3. 调用epoll_wait(2),并且它会返回RFD,说明它已
2015-05-11 11:08:28
469
原创 《Linux高性能服务器编程》读书笔记之tcp协议详解
1.TCP头部结构TCP头部结构如下图所示,其中的诸多字段为管理TCP连接和控制数据流提供了足够的信息。 16位端口号:告诉主机该报文段是来自哪里以及传给哪个上层的协议或应用程序(目的端口)的。 32位序号:一次TCP通信过程中某个传输方向上的字节流的每个字节的编号。假设主机A和主机B进行TCP通信,A发送给B的第一个TCP报文段中,序号值被系统初始化为某个随机值IS
2015-05-07 10:48:16
671
转载 用户态和内核态的概念区别
究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子:1)例子C代码1. void testfork(){ 2. if(0 = = fork()){ 3. printf(“create
2015-05-04 16:53:07
597
转载 GDB命令
用GDB调试程序 GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更
2015-04-15 18:08:55
410
转载 select,poll,epoll的区别
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用
2015-04-15 16:03:39
443
原创 《UNIX环境网络编程》读书笔记之I/O复用
1.I/O复用使用在下列网络应用场合:a.当客户处理多个描述符(通常是交互式输入和网络套接字)时,必须使用I/O复用。b.如果一个TCP服务器既要处理监听套接字,又要处理已连接套接字,一般就要使用I/O复用。c.如果一个服务器既要处理TCP,又要处理UDP,就要用到I/O复用d.如果一个服务器要处理多个服务或多个协议,一般就要使用I/O复用。2.I/O模型
2015-03-26 10:03:09
730
转载 《TCP/IP详解卷1:协议》读书笔记
UDP协议1.UDP简要介绍UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议。2.UDP协议头2.1.UDP端口号由于很多软件需要用到UDP协议,所以UDP协议必须通过某个标志用以区分不同的程序所需要的数据包。端口号的功能就在于此,例如某一个UD
2015-03-24 11:41:09
862
转载 孤儿进程与僵尸进程
一、定义:什么是孤儿进程和僵尸进程僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。僵尸进程将会导致资源浪费,而孤儿则不会。子进程持续10秒钟的僵尸状
2015-03-15 10:46:11
373
原创 《STL源码剖析》读书笔记之关联式容器(2)
1.hashtable 二叉搜索树具有对数平均时间的表现,但这样的表现构造在一个假设上:输入数据有足够的随机性。而hashtable在插入、删除、搜寻等操作上也具有“常数平均时间的表现”,而且这种表现是以统计为基础的,不依赖于输入的随机性。 一个简单的hashtable的例子: 如果元素是32bits而不是16bits,我们要准备的array就必须是4GB的
2015-03-13 16:06:15
635
原创 《STL源码剖析》读书笔记之关联式容器(1)
1.AVL树 AVL tree是指任何节点的左右子树高度相差最多1的二叉搜索树。任何节点左右子树高度最多相差1能够保证AVL树具有“对数深度”的平衡状态。在对AVL tree进行插入操作时,可能造成树平衡被破坏。根据新结点插入位置的不同,可以将平衡的破坏分成四种情况:左左,左右,右左,右右。其中左左和右右被称为外侧插入,可以采用单旋转操作调制解决。而左右和右左则称为内侧插入,可以采用双
2015-03-13 09:55:56
682
原创 《STL源码剖析》读书笔记之序列式容器(3)
1.heap heap不属于STL容器组件,它是priority queue的底层实现机制。(1)push_heap算法 向堆中加入元素,首先将要加入的元素放到堆所在数组的末端,然后再对这个元素进行上溯操作,直到新堆合法为止。如下图所示:(2)pop_heap算法 pop_heap操作取走堆中的最大(小)值。根据堆的特性,堆的最大(小)值必定是堆所存
2015-03-06 16:30:42
566
原创 《STL源码解析》读书笔记之序列式容器(2)
1.deque deque和vector的最大差异在于deque允许在常数时间内对首端进行元素的插入和删除操作。而且deque没有容量的观念,因为它是动态地以分段连续空间组合而成的,随时可以增加一段新的空间并链接起来。像vector那样因旧空间不足而重新配置一块更大空间的情况在deque里是不会发生的。虽然deque也提供Random Access Iterator,但它的迭代器并不是
2015-03-06 11:35:48
564
原创 《STL源码解析》读书笔记之序列式容器(1)
1.vector vector的数据安排以及操作方式与array非常相似,两者的唯一差别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能再改变。vector是动态空间,随着元素的加入它的内部机制会自行扩充空间以容纳新元素。(1)vector的迭代器 因为vector维护的是一个连续线性空间,所以无论其元素型别为何,普通指针都可以作为vector的迭代器。因
2015-03-05 16:46:24
685
转载 .h文件与.c文件的区别
其实要理解C文件与头文件有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就
2015-02-04 15:23:05
475
原创 《STL源码解析》读书笔记之allocator(1)
1.具有sub-allocation的SGI内存配置器 内存配置器allocator是stl中的一个模板类,它提供类型化的内存分配以及释放操作。SGI STL的配置器与众不同,其名称是alloc而非allocator,而且不接受任何参数(如vector)。每个SGI STL容器采用的默认内存配置其都是alloc而不是allocator。 首先介绍a
2015-02-03 22:27:34
719
转载 c++命名空间总结
本讲基本要求 * 掌握:命名空间的作用及定义;如何使用命名空间。 * 了解:使用早期的函数库 重点、难点 ◆命名空间的作用及定义;如何使用命名空间。 在学习本书前面各章时,读者已经多次看到在程序中用了以下语句:using namespace std; 这就是使用了命名空间std。在本讲中将对它作较详细的介绍。一、
2015-02-03 15:22:08
495
原创 8种经典排序算法总结
1.二分查找代码:int binarySearch(int arr[],int l,int r,int x){ while(l { int m = l + (r-1)/2;//为了防止(l+r溢出) if(arr[m] == x) return m; if(arr[m]
2015-01-19 09:40:03
824
原创 LeetCode:Fraction to Recurring Decimal
题目描述:Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.If the fractional part is repeating, enclose the repeating part in pare
2015-01-08 11:32:13
1076
原创 LeetCode:Sqrt(x)
题目描述:Implement int sqrt(int x).Compute and return the square root of x.思路分析:采用二分查找的思想。当未找到mid=x/mid时,若mid>x/mid,则表示mid-1为平方值最接近但不超过x的值,即结果为mid-1。若mid代码: if(x == 0 || x == 1)
2015-01-07 19:02:00
599
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人