- 博客(20)
- 收藏
- 关注
原创 玩具宏
#include #define STRING_1(_VAL) #_VAL#define STRING(_VAL) STRING_1(_VAL)#define LINK_1(A,B) A##B#define LINK(A,B) LINK_1(A,B)#define LINK_A_1(A,B,C) A##B##C#define LINK_A(A,B,C) LINK_A_1(A,B,
2014-05-16 16:52:51 662
原创 linux内核学习笔记——VMALLOC
位置:vmalloc区位是一段虚拟地址空间,位于内核地址空间,介于低端内存映射区和持久映射区之间,虚拟地址范围从VMALLOC_START至VMALLOC_END,如下图土黄色部分: 功能:调用vmalloc函数时,会从该VMALLOC区申请一部分连续的虚拟地址空间,从物理内存申请一些不连续的物理内存页,将其关联起来,并修改内核页表使内核通过该连续的虚拟地址访问到不连续的物理内存页帧。
2013-07-25 14:41:05 980
原创 linux内核学习笔记——持久映射
位置:持久映射区在内核地址空间中,夹在vmalloc区和固定映射区之间,(PKMAP_BASE至FIXMAP_START)。功能:将高端内存长期映射到内核地址空间中,通过kmap函数实现,kmap函数传入page*。步骤:通过kmap将传入的page*映射到虚拟内存时分以下几步:1.在内核地址空间(持久映射区)分配一个页;2.建立传入的物理内存页和虚拟地址之间的映射;3.统计内核地址空间中
2013-07-24 11:41:07 1477
原创 树和森林的孩子兄弟结构
linux内核中多处用到层次链表结构来组织一些相同类型的数据。如task_struct,dentry,vfs_mount等,结构图如下: 实现原理很简单,主要有三个字段:parent:指向父结构的指针children:子结构链表的头sibling:将自己连接到父节点的子结构链表中。结构定义如下:typedef struct _list { struc
2013-07-16 10:59:16 867
原创 多线程练习题
#include #include #include #define THREAD_NUM 3static unsigned int g_num = 0;static pthread_t g_tarr[THREAD_NUM];static pthread_cond_t g_cond;static pthread_mutex_t g_mutex;void* thn_t (voi
2013-07-15 14:35:18 688
原创 批量作业调度
最笨的方法实现批量作业调度问题。计算出所有作业的左右排列的耗时#include #include int flowadd (int *arr, int *arr1, int *arr2, int len) { int i, dlte = 0 - arr2[arr[0]]; int sum = arr1[arr[0]] + arr2[arr[0]]; for (i = 1; i
2013-07-12 15:37:51 1095
原创 n皇后
printque:该函数以矩阵的形式打印一个n皇后的可行解。judge:该函数判断新插入到arr数组中的当前棋子的位置是否可行。nqueue:该函数递归遍历排列树解空间。#include #include void printque (int *arr, int len) { int i, j; for (i = 0; i < len; ++i) { for (j = 0
2013-07-12 09:44:09 464
原创 链表逆序
#include #include typedef struct _node { struct _node *m_link; int m_data;}node_t;void list_insert (node_t **node, int data) { node_t *tmp = (node_t*)malloc(sizeof(node_t)); tmp->m_data = da
2013-07-11 17:07:30 444
原创 list_hashmap
节点被同时链接在list和hashmap中,我是在mfs的readdata.c中看到的,在linux内核代码中经常遇到,单linux内核代码是通过结构中内置list_head实现的,访问时还需要计算结构的首地址。而这里的节点通过m_listnext和m_hashnext用来指向其在list和hashmap中的下一个节点。 图示:这里写一个简单的演示小程序。在getnode函数
2013-07-10 16:30:18 499
原创 list add test
两个singly linked list,每一个节点里面一个0-9的数字,输入就相当于两个大数了。然后返回这两个数的和(一个新list)。这两个输入的list长度相等。#include #include #include typedef struct _node { int m_data; struct _node *m_link;}node_t; void l
2013-07-10 15:55:38 527
原创 多线程队列
利用条件变量实现的多线程队列pqueue,原理:1. 在pqueue结构里定义了两个条件变量m_full和m_free,两个计数器m_freewait和m_fullwait。2. 生产者线程向队列插入数据前,判断队列是否满,如果满则让该线程等待在m_full,等待消费者线程从队列取元素,计数器m_fullwait自增,用来表示等待m_full的生产者线程数。3. 生产者线程向队列中
2013-06-02 20:35:27 845
原创 moosefs相关
// loop.h#ifndef _LOOP_H_#define _LOOP_H_#include typedef void (*desc_t) (struct pollfd *pdesc, int *ndesc);typedef void (*serve_t) (struct pollfd *pdesc);void poll_register (desc_t desc, s
2013-05-29 22:06:32 470
原创 进程间通信——管道
用管道来进行进程间通信是通过pipe函数,管道只能支持父子进程或有公共祖先的进程之间通信。pipe函数原型:#include int pipe (int fd[2]);该函数被调用后,会通过fd数组传出两个文件描述符fd[0]和fd[1],其中fd[0]为读而打开,fd[1]为写而打开。从fd[0]中读的数据,就是往fd[1]中写的数据。当父进程调用fork后,子进程继承了父
2013-05-27 20:35:41 567
原创 simple_hash_list
#ifndef _SIMPLE_HASH_TABLE_ #define _SIMPLE_HASH_TABLE_ typedef struct _hashnode { int m_index; struct _hashnode* m_link;} hashnode_t; typedef int (* hashfunc_t) (int node);
2013-05-22 08:53:09 498
原创 cache_double_list
#ifndef _DOUBLE_LIST_CACHE_H_#define _DOUBLE_LIST_CACHE_H_#define NODE_SIZE 128typedef struct _cnode { int m_data[NODE_SIZE]; int m_start; int m_finish; int m_index; struct _cnode* m_prev;
2013-05-21 14:22:35 480
原创 simpletree
#ifndef _SIMPLETREE_H_#define _SIMPLETREE_H_typedef struct _node { int m_data; struct _node* m_left; struct _node* m_right;} node_t;void tree_insert (node_t** root, int data);void tree_remo
2013-05-17 12:38:36 522
原创 another builder
#ifndef _ANOTHER_BUILDER_H_#define _ANOTHER_BUILDER_H_class builder;class Product{public: Product (); void show ();private: friend class Builder; int m_part1; int m_part2; in
2013-05-17 08:58:26 455
原创 builder
package builder.inf;import builder.Product;public interface IBuilder { public Product construct();}package builder.impl;import builder.Product;import builder.inf.IBuilder;import
2013-05-15 22:43:40 513
原创 simple list
#ifndef _SIMPLE_LIST_#define _SIMPLE_LIST_ typedef struct _node { int m_data; struct _node* m_link;} node_t; typedef struct _list { node_t* m_head;}list_t; void list_i
2013-05-15 14:56:16 533
原创 abstract factory
package abstract_factory.inf;public interface IAbstractfactory { public IPartA createPartA (); public IPartB createPartB (); public IPartC createPartC ();}package abstract_factory.inf;
2013-05-14 23:08:40 560
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人