- 博客(18)
- 资源 (11)
- 问答 (2)
- 收藏
- 关注
原创 Linux内核探讨-- 第二章
本文是个人分析《Linux内核设计与实现》而写的总结,欢迎转载,请注明出处: http://blog.csdn.net/dlutbrucezhang/article/details/12185125 第二章 --进程调度
2013-09-30 10:58:14 2346
原创 Linux内核探讨-- 第一章
第一章--进程管理1.什么是进程 第一章首先从进程开始讲起,进程是操作系统最基本的东西,我们依靠进程提供服务,利用进程完成我们需要完成的工作。首先需要明白什么是进程。它是一个动态实体,是程序的一次执行过程。一个进程需要一些必须的资源才能够运行,而最基本的资源就是 CPU 和内存。进程获得 CPU 它就处于运行状态,进程的运行肯定需要程序段,数据段,堆,栈这样的资源,而这些就是
2013-09-28 21:48:06 1975
原创 合并两个有序的链表
记得以前写过一个合并两个有序数组的问题,也就是相互比较并放入合适的位置,今天的这个算法和数组的问题其实是一样的,这里不多做介绍了,直接贴出代码:链表的定义:typedef struct _Node{ int data; struct _Node *next;}Node, *List;合并代码:List merge_two_list(List list1, List list2){ Li
2013-09-27 19:37:13 1654
转载 linux 同步与异步--阻塞与非阻塞型I/O
同步阻塞IO在这个模型中,应用程序(application)为了执行这个read操作,会调用相应的一个system call,将系统控制权交给kernel,然后就进行等待(这其实就是被阻塞了)。kernel开始执行这个system call,执行完毕后会向应用程序返回响应,应用程序得到响应后,就不再阻塞,并进行后面的工作。例如,“在调用 read 系统调用时,应用程序会阻塞并对内核进行上下文切换。
2013-09-25 15:20:17 2414
原创 快速修改数组的问题
记得去年上算法分析课的时候讲过怎么快速的修改数组,比如,把数组中偶数放在前面,奇数放在后面;把数组中能被三除尽的数放在前面,不能的则放在后面。。。 如果,我没看到那道题我的思路肯定是一个一个的写函数呗,不就是快速排序的思想吗,不过,当我看到了那道题的解法后,发现,真的应该好好想想函数的通用性。 下面,我直接贴出代码:#include int quick_insert_(in
2013-09-25 15:15:15 1773
原创 C语言 string.h 中函数的实现
最近是校招很热的季节,实验室里讨论最多的也就是算法,面试和笔试的必备知识储备。昨天想起 C 语言中 string.h 中的函数在操作字符串时很方便,所以,就想起写写那些函数。 当然,这些函数实现的只是简单的功能,并没有加入太多的排错功能,欢迎大家及时指正代码中出现的问题,谢谢!my_string.h#include #include int my_strcmp(char *stri
2013-09-25 08:47:02 4088 12
原创 合并有序数组问题
有这样一个问题,现在有两个有序的数组,第一个数组的空间足够容纳两个有序数组中的数,利用高效的方法把两个数组合并,并使得数组是有序的,且最后得到的是第一个数组,同时不借助其他额外的存储空间。 其实这种题的解法几乎都是一样的,都是从最后一个数开始,这就是取极值的思想,因为数组是有序的,所以,每个数组中最大的那个数一定在数组的末尾。 这里,先贴出代码,之后再讲解原理:#include
2013-09-19 16:30:08 4165 7
原创 倒序输出单链表的内容
单链表是最简单的数据结构,同时也是最常接触的数据结构,这个问题也很常见,通常这个问题我们有两种解决办法。 1.逆置单链表之后输出 这篇文章讲述了这样的过程http://blog.csdn.net/dlutbrucezhang/article/details/11709633,但是这种方法不一定可行,因为这样改变了单链表原来的结构 2.利用栈的后进先出的思想,首先我们正
2013-09-19 16:12:23 3095
原创 判断单链表是否有环
单链表是最常见的数据结构,带环的单链表不是很常见,但是在许多面试中出现的概率较高,其中不乏一些经典的问题,怎样判断单链表中是否有环。 单链表带环指的是如下这张图所示情况: 其实思想还是挺简单的: 我们需要两个指针,初始时都指向链表的头,之后指针同时移动,其中一个指针一次移动一步,另一个指针一步移动两步,如果两个指针有相等的可能,则链表就是有环的,否则,出现一个指针指向
2013-09-16 17:09:36 2021 2
原创 两个数之和等于第三个数
这是一个很好的算法题,解法类似于快速排序的整理方法。同时,更为值得注意的是这道题是 人人网2014校园招聘的笔试题,下面首先对题目进行描述: 给出一个有序数组,另外给出第三个数,问是否能在数组中找到两个数,这两个数之和等于第三个数。 我们首先看到第一句话,这个数组是有序的,所以,我们可以定义两个指针,一个指向数组的第一个元素,另一个指向应该指向的位置(这个需要看具体的实现和数组
2013-09-16 16:04:34 6417 2
原创 C语言实现单链表的逆置
单链表的逆置是一个非常经典的问题,这里利用两个思想进行解决。 首先,我们需要看下原理图,其实两个思想都是一样的,都是使后一个的节点的 next 指针指向前一个节点,依次递推,直到第二个节点指向第一个节点,第一个节点的 next 指针指向 NULL。 第一种方法: 在链表往前走的过程中,记录前一个节点,当前节点和后一个节点,并使当前节点的 next 指针指向前一个节点,
2013-09-15 16:29:43 11916 5
转载 fcntl使用
功能描述:根据文件描述词来操作文件的特性。#include #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);[描述]fcntl()针对(文件)描述符提供控制。参数fd是被参数cmd操作(如下面的描述)的
2013-09-14 22:51:55 1472
原创 查找重复的数
在前几天写了一个查找缺失的数的算法(http://blog.csdn.net/dlutbrucezhang/article/details/11467693),今天写一个类似的算法,查找一个重复的数。 描述:一个数组中存放连续的数字,但是其中多出一个数字,是一个重复出现的数字,当然,它可以出现在任何位置。 解决方法: 1.总和相减法 由于多出一个数,所
2013-09-13 19:22:15 1640
原创 Linux中的信号处理原理
Linux中的信号来自Unix,在发展了30多年之后,许多方面都没有发生太大的变化。信号可以由内核产生,也可以由用户进程产生,并由内核传送给特定的进程或线程(组),若这个进程定义了自己的信号处理程序,则调用这个程序去处理信号,否则则执行默认的程序或者忽略。 信号处理程序是用户态进程所定义的函数,并包含在用户态的代码段中。handle_signal()函数运行在内核态,而信号处理程序运行在
2013-09-11 19:26:50 3437
原创 数组中存储不定个数的元素
现在有这样一个问题: 首先定义一个大小为20的整型数组,就好像这样-- int a[20], 之后,根据需要存储一定量的数到数组中(可以小于20个),要求是输入数字以空格为单位隔开,直到输入回车结束输入,并把数字存入数组中。 示例:输入数据 1 2 9 8 7(\r),之后 a[0] = 1,a[1] = 2,a[2] = 9,a[3] = 8, a[4] = 7,其余初始化为0
2013-09-09 18:30:07 3458 5
原创 查找缺失的数
有这样一个数组,它包含 1 - n 中的 n - 1 个数,缺少的那个数不知道,怎样才能找到那个数? 这里有两种方法实现上述问题。 1.对所有数求和之后用原有的总和去减即可 2.利用异或运算 -- 由于异或的原理是相同则为0,所以,首先异或1到n中的每个数,接着利用所得到的结果异或数组中的 n - 1 个数,最终得到的那个数就一定是缺少的那个数 让我们看下实
2013-09-09 09:53:23 2312
转载 神奇的大内核锁
Big Kernel Lock(BKL)(大内核锁),是linux内核中使用到的一种锁,它跟普通的锁原理上的一样的:lock_kernel();/* 临界区 */unlock_kernel();但是它又有一些非常诡异的地方。从表面上看:1、BKL是一个全局的锁(注意,是“一个”而不是“一种”),它保护所有使用它来同步的临界区。一旦一个进程获得BKL,进入被它保护的临界区,不但该临界区被上锁,所有被
2013-09-04 10:55:46 2588
转载 8086 CPU 寄存器简介
8086 CPU 中寄存器总共为 14 个,且均为 16 位 。即 AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个。而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。通用寄存器:AX,BX,CX,DX 称作为数据寄存器:AX (Accumulator):累加寄存器,也称之为累加器;BX (Base):基地址寄存器;CX
2013-09-03 10:56:37 2042
python 进程池失效原因
2015-09-02
怎样实现数据的动态采样
2014-05-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人