- 博客(34)
- 资源 (1)
- 收藏
- 关注
原创 对虚拟化技术的理解
VMM为每个虚拟机分配一套数据结构来管理状态,包括虚拟处理器的全套寄存器,物理内存使用情况、虚拟设备状态。VMM调度虚拟机时,将其部分状态恢复到主机系统中。Guest OS运行在低特权级,涉及到需要特权级操作的时候,比如写CS或者GDT寄存器的时候,权限不错会导致异常,运行权自动交还给VMM,VMM可以使用一些二进制翻译的技术,比如把压cs寄存器的指令替换成压到栈上面,把读取GDT的指
2014-06-19 20:38:28
3615
转载 GDB调试中查看栈信息
查看栈信息当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。下面是一些查看函数调用栈信息的GDB命令: Backtrace,bt 打印当前的函数调用栈的所有信息。如: (gdb) bt
2014-06-03 21:51:48
2165
转载 Git fetch和git pull的区别
Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge
2014-05-25 16:41:43
613
原创 对linux 0.11版本内核中的进程退出和回收的理解
常常看到调用exit结束进程,那结束进程到底做了哪些事情叫结束进程呢?目前在看的linux 0.11版本的内核里面的exit()系统调用里面就是调用了do_exit(),它的源码如下:
2014-05-13 23:04:04
1676
原创 对linux 0.11版本内核的kill系统调用的理解
kill系统调用以前一直认为只是用来杀死某个进程的,看了源码纠正下自己的错误认识。源码如下:
2014-05-13 19:02:03
1563
原创 对linux 0.11版本中do_signal()的理解
do_signal()的做法蛮让人印象深刻的,在此记录下来。do_signal()函数式内核系统调用(int 0x80)中断处理程序中对信号预处理程序。假如看过系统调用或者时钟中断的源码,会发现他们在退出的时候总会检查下信号位图,假如有的会就会调用do_signal,它会把信号的处理函数插入到用户程序堆栈中,然后修改中断返回的环境,直接返回到用户态的信号处理函数中先,再从用户态中跳转到原先执行
2014-05-11 21:55:41
2444
原创 linux 0.11版本内核中信号signal()和sigaction()的区别
记录下我对这两个有关信号程序的理解,signal()和sigaction()主要用来设置针对某一信号的处理程序,这两个系统调用会首先会在进程自己的任务数据结构中设置sigaction[]结构数组,该元素结构如下图所示:
2014-05-11 20:54:29
1543
原创 对于linux 0.11版本中睡眠和唤醒函数的理解
sleep_on()函数主要是为了在一个进程所请求的资源忙的时候进行进程调度,并把该进程放到等待队列上等待一段时间。代码如下:void sleep_on(struct task_struct **p){ struct task_struct *tmp; if (!p) return; if (current == &(init_task.task)) panic("task[
2014-05-09 18:15:27
1883
1
原创 对linux 0.11版本中switch_to()的理解
switch_to的代码在linux-0.11\include\linux中的sched.h。它是一个宏定义,代码如下:
2014-05-09 15:24:20
2747
1
原创 对linux 0.11版本中进程调度源码的理解
刚看到有关进程调度的源码,记录下。部分源码如下:void schedule(void){ int i,next,c; struct task_struct ** p;/* check alarm, wake up any interruptible tasks that have got a signal */ for(p = &LAST_TASK ; p > &FIRST_TA
2014-05-09 13:56:54
1463
原创 实地址模式和保护模式的理解
在微处理器的历史上,第一款微处理器芯片4004是由Intel推出的,那是一个4位的微处理器。在4004之后,intel推出了一款8位处理器8080,它有1个主累加器(寄存器A)和6个次累加器(寄存器B,C,D,E,H和L),几个次累加器可以配对(如组成BC, DE或HL)用来访问16位的内存地址,也就是说8080可访问到64K内的地址空间。另外,那时还没有段的概念,访问内存都要通过绝对地址,因此程
2014-04-23 16:46:03
4466
原创 虚拟文件系统VFS的内核数据结构及联系
VFS:Linux支持各种各样的文件系统格式,如ext2、ext3、reiserfs、FAT、NTFS、iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以mount到某个目录下,使我们看到一个统一的目录树,各种文件系统上的目录和文件我们用ls命 令看起来是一样的,读写操作用起来也都是一样的,这是怎么做到的呢?Linux内核在各种不同的文件系统格
2014-04-20 23:35:44
960
原创 编程之美中有关阶层的算法
①给定一个整数,求N!末尾有多少个0思路:假如想把N!算出来之后再对其求末尾0的个数只有在N比较小的时候才能行得通。换种思路,任何一个大于1的正整数都可以唯一的写为两个或者多个素数的乘积,其中素数因子以非递减的顺序出现。举个例子,比如100 = 2*2*5*5 = 2的平方乘以5的平方 ,那N!同样可以表示成这种形式,如果N!的末尾有0,那N!的因子里至少包含一个2和1个5,现在求末尾有多
2014-04-20 19:47:13
2424
原创 gdb调试器的原理
上次实习生面试问道GDB的问题,现在来总结下。当运行gdb,接着通过命令行去run一个程序的时候,gdb会执行如下几个操作:① 通过fork()系统调用创建一个新的进程,一开始是gdb的进程,现在要fork出一个函数去执行被调试的程序。② 在新创建的子进程中执行下述操作ptrace(PTRACE_TRACEME,0,0,0);这样这个新创建出来的子进程就能被父进程追踪。
2014-04-18 21:42:35
2982
原创 剑指offer第28题扩展题
输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
2014-04-14 23:55:54
1075
原创 微软2014机试第二题
DescriptionConsider a string set that each of them consists of {0, 1} only. All strings in the set have the same number of 0s and 1s. Write a program to find and output the K-th string according to
2014-04-14 19:29:41
946
原创 微软2014机试第一题
DescriptionFor this question, your program is required to process an input string containing only ASCII characters between ‘0’ and ‘9’, or between ‘a’ and ‘z’ (including ‘0’, ‘9’, ‘a’, ‘z’). Y
2014-04-12 21:25:28
721
转载 linux常用的内存分配接口
void * kmalloc(size_t size, gfp_t flags);该接口返回至少size字节的物理连续的内存空间。用法和c语言malloc函数一样。当然还有类似free的内存释放函数void kfree(const void *ptr);内核还提供vmalloc函数,用法和kmalloc一样,唯一的不同的vmalloc不保证分配的内存是物理连续的。怎么选择用哪个
2014-04-06 23:14:35
939
原创 判断链表是不是有环
void Isloop(Llink head){ if(!head||!head->next) return; Llink p,q; bool loop=false; p=q=head->next; while(q&&q->next)//判断是否有环 { p=p->next; q=q->next->next; if(p==q) { loop=true; break; } }
2014-04-06 16:18:42
755
原创 求二进制数中的1的个数
今天在做深入理解计算机系统的LAB1,其中有道题求二进制数中的1的个数看到这种算法int bitCount(int x) { n = (n &0x55555555) + ((n >>1) &0x55555555) ; n = (n &0x33333333) + ((n >>2) &0x33333333) ; n = (n &0x0f0f0f0f) +
2013-12-01 21:21:59
975
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人