摘要:
#include <unistd.h>#include <stdio.h>#include <stdlib.h>int main(void){pid_t pid;if((pid=fork())==-1) { printf("error"); }else if(pid==0){printf("ok\n");exit(0);}else{printf("parent process,output begin\n");printf("hello word");_exit(0);}}调试后 阅读全文
posted @ 2013-01-24 04:03
notepi
阅读(7331)
评论(0)
推荐(0)
摘要:
我们在程序中使用的变量和函数都有各自的地址,程序被编译后,这些地址就成了指令中的地址,指令中的地址被CPU解释执行,就成了CPU执行单元发出的内存地址,所以在启用MMU的情况下,程序中使用的地址都是虚拟地址。一个操作系统中同时运行着很多进程,通常桌面上的每个窗口都是一个进程,Shell是一个进程,在Shell下敲命令运行的程序又是一个新的进程,此外还有很多系统服务和后台进程在默默无闻地工作着。由于有了虚拟内存管理机制,各进程不必担心自己使用的地址范围会不会和别的进程冲突,比如两个进程都使用了虚拟地址0x08048000,操作系统可以设置MMU的映射项把它们映射到不同的物理地址,它们通过同样的虚 阅读全文
posted @ 2013-01-24 02:03
notepi
阅读(796)
评论(0)
推荐(0)
摘要:
访问设备还有一点和访问内存不同。内存只是保存数据而不会产生新的数据,如果CPU不去读它,它也不需要主动提供数据给CPU,所以内存总是被动地等待被读或被写。而设备往往会自己产生数据,并且需要主动通知CPU来读这些数据,例如敲键盘产生一个输入字符,用户希望计算机马上响应自己的输入,这就要求键盘设备主动通知CPU来读这个字符并做相应处理,给用户响应。这是由中断(Interrupt)机制实现的,每个设备都有一条中断线,通过中断控制器连接到CPU,当设备需要主动通知CPU时就引发一个中断信号,CPU正在执行的指令将被打断,程序计数器会设置成某个固定的地址(这个地址由体系结构定义),于是CPU从这个地址开 阅读全文
posted @ 2013-01-24 00:26
notepi
阅读(249)
评论(0)
推荐(0)

浙公网安备 33010602011771号