07 2013 档案

摘要:Linux操作系统内核态对进程线程不做严格区别 从内核角度看根本就没有线程的概念,线程仅仅被视为一个使用某些共享资源的进程如地址空间,文件系统,打开的文件,信号处理程序等 进程0 内核是一个大的程序,可以控制硬件,也可以创建、运行、终止、控制所有的进程。当内核被加载到内存后,首先就会有完成内核初始化的函数start_kernel()从无到有的创建一个内核线程swap,并设置其PID为0,即进程0;它也叫闲逛进程;进程0执行的是cpu_idle()函数,该函数仅有一条hlt汇编指令,就是在系统闲置时用来降低电力的使用和减少热的产生。同时进程0的PCB叫做init_task,在很多链表中起了表头的 阅读全文
posted @ 2013-07-29 20:59 herry_tu 阅读(2922) 评论(0) 推荐(0)
摘要:在每个进程退出如调用exit或return的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等,但是进程并没有立马就消失,而是仍然为其保留一定的信息(包括进程号,退出状态,运行时间, 直到父进程通过wait/waitpid来处理时才进行释放。此时该进程处于僵尸状态,该进程成为僵死进程(Zombie Process)。它需要它的父进程来为它收尸,如果他的父进程没安装SIGCHLD信号处理函数调用wait或waitpid()等待子进程结束,又没有显式忽略该信号, 那么它就一直保持僵死状态,此时即使是root用户也无法清理,如果这时父进程结束了,僵死的子进程成为"孤儿进程&quo 阅读全文
posted @ 2013-07-29 20:56 herry_tu 阅读(467) 评论(0) 推荐(0)
摘要:http://coolshell.cn/articles/7965.html前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下。这个题是这样的: 题目:请问下面的程序一共输出多少个“-”? 1#include2#include3#include45intmain(void)6{7inti;8for(i=0;i0,则是父进程(返回值是子进程的pid),这是众为周知的。 还有一个很重要的东西是,在fork()的调用处,整个父进程空间会原模原样地复制到子进程中,包括指令,变量值,程序调用栈,环境变量, 阅读全文
posted @ 2013-07-24 15:42 herry_tu 阅读(194) 评论(0) 推荐(0)
摘要:首先它们最终都调用了内核里的do_fork()函数,然后完成了下述操作 1、调用alloc_task_struct()函数申请8KB的内核栈内存空间,供新建进程使用; 2、让指针指向父进程的PCB,然后将父进程的PCB内容拷贝到给新进程分配的PCB中去,此时父子进程完全相同,当然拷贝内容包括了:指令,变量值,程序调用栈,缓存区,环境变量等等,而此时若搭配一些有缓存的语句,就会出现意想不到的结果了,这是后话。 3、检查创建该进程后,是否越界,即该用户所拥有的进程数目是否超过了给它分配的资源的限制; 4、然后就是建立新创建的子进程的新的,独有资源,并且通知内核此进程已经诞生。 5、设置子进程的状态 阅读全文
posted @ 2013-07-24 15:29 herry_tu 阅读(1461) 评论(0) 推荐(0)
摘要:http://www.cppblog.com/superKiki/archive/2010/10/18/130328.html http://www.doc88.com/p-977311895786.html本文将总结一种数据结构:跳跃表。前半部分跳跃表性质和操作的介绍直接摘自《让算法的效率跳起来--浅谈“跳跃表”的相关操作及其应用》上海市华东师范大学第二附属中学 魏冉。之后将附上跳跃表的源代码,以及本人对其的了解。难免有错误之处,希望指正,共同进步。谢谢。 跳跃表(Skip List)是1987年才诞生的一种崭新的数据结构,它在进行查找、插入、删除等操作时的期望时间复杂度均为O(logn.. 阅读全文
posted @ 2013-07-24 15:16 herry_tu 阅读(229) 评论(0) 推荐(0)
摘要:当一个进程从用户态进入内核态,CPU自动设置该进程的内核栈,这个栈位于内核数据段上。同时,为节省空间,Linux把内核栈和一个紧挨近PCB的小数据结构thread-info放在一起,占用8KB的内存区。 在Intel系统中,栈起始于末端,并朝这个内存区开始的方向“增长”。刚切换过来,内核栈是空的,堆栈寄存器ESP直接指向此内存区的顶端。通过找到thread-info来找到当前运行的task-struct(PCB)(,那么是怎样找到的呢?下边介绍)。 但是要注意,实际上进程的PCB所占内存是由内核动态分配的,更确切的说,内核根本不给PCB分配内存,而仅仅给内核栈分配8KB的内存,并把其中的一.. 阅读全文
posted @ 2013-07-24 14:47 herry_tu 阅读(1300) 评论(0) 推荐(0)
摘要:操作系统的功能: 1 操作系统接口 2 CPU管理 3 内存管理 4 设备管理 5 文件管理 操作系统的设计采用分层结构,越是上层,越接近用户 操作系统=内核+系统程序 系统程序=编译环境+API+AUI 编译环境=编译程序+连接程序+装载程序 Linux内核是单内核结构,即把内核作为一个大整体来实现,而各模块之间可以直接调用相关函数 延迟执行机制----下半部分,软中断,Tasklet,工作队列等qsort包含在头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序。排序之后的结果仍然放在原数组中。使用qsort函数必须自己写一个比较函数。 函数原型: void q... 阅读全文
posted @ 2013-07-24 14:43 herry_tu 阅读(238) 评论(0) 推荐(0)
摘要:有关系统调用getopt:声明: #include int getopt(int argc, char *const argv[], const char *optstring); extern char *optarg; extern int optind, opterr, optopt;使用方法:在while循环中反复调用,直到它返回-1。每当找到一个有效的选项字母,它就返回这个字母。如果选项有参数,就设置optarg指向这个参数。当程序运行时,getopt()函数会设置控制错误处理的几个变量:char *optarg ──如果选项接受参数的话,那么optarg就是选项参数。int op. 阅读全文
posted @ 2013-07-20 11:30 herry_tu 阅读(170) 评论(0) 推荐(0)
摘要:错误一: 00000000000p[ ] >>PANIC<< bochsrc:10: vgaromimage directive malformed. vgaromimage: /usr/share/vgabios/vgabios.bin 改成 vgaromimage: file=/usr/share/vgabios/vgabios.bin 问题二: Event type: PANIC Device: [ ] Message: dlopen failed for module 'x': file not found sudo apt-get instal 阅读全文
posted @ 2013-07-20 11:24 herry_tu 阅读(5099) 评论(0) 推荐(0)
摘要:首先想要說的是尽量不要下载一些安装包去安装,那样会得不偿失,安装好长时间以后发现还是各种问题,而且特别难解决,因此,直接去官网下载一个源码包,然后编译源码,进行安装会更好,更快。编译之前先安装如下的库: gtk2,libXt,libXpm #sudo yum install gtk2 gtk2-devel #sudo yum install libXt libXt-devel #sudo yum install libXpm libXpm-devel tar -vxzf bochs-2.6.1.tar.gz进行安装cd bochs-... 阅读全文
posted @ 2013-07-20 11:18 herry_tu 阅读(2070) 评论(0) 推荐(0)