摘要: vmware虚拟机上安装linux系统后,发现不能全屏,原因是vmware-tool没有安装。解决方法:前提:在linux系统界面1、下载vmware-tool选择 VM -> Install VMware Tools.2、以root用户登录系统,进入一个终端,mount cdrom到系统(有些系统默认已经mount cdrom,可以到/mnt目录下去查看一下)。mkdir /mnt/cdrommount /dev/cdrom /mnt/cdrom3、进入/mnt/cdrom后会发现一个vmware-tool文件,我的是VMwareTools-8.4.6-385536.tar.gz。解压 阅读全文
posted @ 2014-01-05 18:04 菜鸟天空 阅读(1474) 评论(0) 推荐(0) 编辑
摘要: 刚开始学习内核,建议用早期版本的源码。因为内核也一直在修改,最新的版本可能会和某些早期的内核学习书籍上内容有出入。内核官网:https://www.kernel.org/内核早期版本源码:https://www.kernel.org/pub/linux/kernel/ 阅读全文
posted @ 2014-01-01 11:35 菜鸟天空 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 进程就是处于执行期的程序。包括可执行代码和其他资源,如:打开的文件,挂起的信号,内核内部数据,处理器状态,内存映射空间和一个或多个执行线程等。进程描述符内核把进程的列表存放在叫做任务队列的双向链表中,链表中的每一项都是类型为task_struct(进程描述符)的结构,该结构定义在文件中。进程描述符包含一个进程的所有信息。其内核定义如下:struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; atomic_t usage; unsigned int 阅读全文
posted @ 2014-01-01 11:31 菜鸟天空 阅读(425) 评论(0) 推荐(0) 编辑
摘要: 链表使用基础:链表是linux内核中最简单,最普遍的数据结构。刚开始接触内核的人可能会对linux的链表操作有点不习惯。因为内核链表与大家平时用的链表不同,它不是把数据结构放到链表里面,而是把链表节点放到数据结构里面。linux内核的链表代码在中声明。链表代码在头文件中声明,其数据结构很简单:struct list_head{ struct list_head *next; struct list_head *prev;}next指针指向下一个链表节点,prev指向前一个。从这里可以看出,list链表是双向链表。但链表存储的具体内容是什么呢?其关键就在于理解list_head结构是... 阅读全文
posted @ 2013-12-15 20:39 菜鸟天空 阅读(471) 评论(0) 推荐(0) 编辑
摘要: 一、内核同步基础概念共享数据:能够被多个代码段访问的数据,一般指全局变量和静态变量临界区:访问和操作共享数据的代码段竞争条件:如果两个执行线程可能处于同一个临界区中同时执行,就被称为竞争条件发生了同步:避免并发和防止竞争条件成为同步内核中可能造成并发执行的原因:中断 —— 中断几乎可以在任何时刻异步发生,也就可能随时打断当前正在执行的代码。内核抢占 —— 因为内核具有抢占性,所以内核中的任务可能会被另一任务抢占。对称多处理 (SMP)—— 两个或多个处理器可以同时执行代码。软中断和tasklet —— 内核能在任何时刻唤醒或调度软中断和tasklet,打断当前正在执行的代码。睡眠及与用户空间的 阅读全文
posted @ 2013-12-15 15:23 菜鸟天空 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 一、内核内存管理基础:页:内核把物理页作为内存管理的基本单位。32位系统:4K / 页64位系统:8K / 页区:由于硬件限制,内核不能对所有页一视同仁。linux必须处理如下硬件存在的缺陷而引起的内存寻址问题:一些硬件只能用某些特定内存地址来执行DMA(直接内存寻址)一些体系结构的内存物理寻址范围比虚拟寻址范围大得多。这样一些内存就不能永久映射到内核空间。linux主要使用了四种区:ZONE_DMA —— 这个区包含的页只能用来执行DMA操作ZONE_DMA32 —— 和ZONE_DMA类似,但只能被32位设备访问ZONE_NORMAL —— 这个区包含的页都是能正常映射的页ZONE_HIG 阅读全文
posted @ 2013-12-14 23:00 菜鸟天空 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 内存池设计与实现:http://blog.csdn.net/shawngucas/article/details/6574863 阅读全文
posted @ 2013-08-09 09:11 菜鸟天空 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 1、什么是const?常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。2、为什么引入const?const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。3、cons有什么主要的作用?(1)可以定义const常量,具有不可变性。 例如:const int Max=100; int Array[Max];(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改; (3)可以避免意义模糊的数字出现,同样可以很方便 阅读全文
posted @ 2013-08-08 17:15 菜鸟天空 阅读(2356) 评论(0) 推荐(0) 编辑
摘要: linux下C语言多线程(一)线程的创建与取消 http://blog.csdn.net/zjl410091917/article/details/8000921linux下C语言多线程(二)线程的私有数据 http://blog.csdn.net/zjl410091917/article/details/8000926linux下C语言多线程(三)线程同步 http://blog.csdn.net/zjl410091917/article/details/8000934linux下C语言多线程(四)线程中止 http://blog.csdn.net/zjl410091917/article/ 阅读全文
posted @ 2013-08-07 15:26 菜鸟天空 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 一、fork入门知识一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。 我们来看一个例子:[cpp] /**fork_test.c*version1*Createdon:2010-5-29*Author:wangth*/#include #include in 阅读全文
posted @ 2013-08-06 18:20 菜鸟天空 阅读(529) 评论(0) 推荐(0) 编辑