2014年3月4日

计算机启动和操作系统加载小话

摘要: 整个启动和加载过程可分为若干步骤,或者称为若干个状态,或者快照,下面的每一段都是描述一个快照。(类似自动状态机)1、电源稳定(POWER GOOD)按下启动键后,电源首先启动。为了保证安全使用,电源的设计采取了许多保护措施,所以电源从起振到稳定有一定的延迟。电源各部分(各输入电压和输出电压等)稳定后,会分别发送一个检测信号,此信号电压为高时表示稳定。所有检测信号都为高时,就产生一个POWER GOOD信号。如果主板接收不到该信号,时钟芯片会一直向cpu发送RESET信号(等同于按下重启键),这样cpu就不会工作。2、CPU电压稳定CPU的VID0-VID3引脚,使CPU工作电压与时钟信号匹配。 阅读全文

posted @ 2014-03-04 16:49 奇好猫 阅读(495) 评论(0) 推荐(0) 编辑

小话硬盘

摘要: 1 为何电脑显示的磁盘容量小于厂商宣称的容量?①对容量的计算方式不同电脑:1KB = 1024B厂商:1KB = 1000B②电脑显示的容量是格式化容量,而厂商宣称的是最大容量磁盘在存储信息之前,必须被磁盘控制器格式化。这包括 用标志扇区的信息填写扇区之间的间隙; 标识出表面有故障的柱面并且不实用他们; 在每个区中预留出一组柱面作为备用。如果区中有柱面在磁盘使用过程中坏掉了,就可以用这些备用的柱面(损坏柱面存储的信息怎么转移出来?)。这些备用柱面是不被算在可用容量中的。2 硬盘为什么要格式化?硬盘想要记录数据就必须先进行低级格式化,来划分柱面、扇区,每个扇区之间又要填充扇区标志等。但低格会使硬 阅读全文

posted @ 2014-03-04 16:49 奇好猫 阅读(148) 评论(0) 推荐(0) 编辑

2014年2月28日

系统调用的错误处理

摘要: UNIX系统中,系统调用后要进行错误检查。若系统调用出错,典型的会返回-1,同时设置全局整数变量errno来表示什么出错了。有些人会忽略错误检查,因为它们使代码变得臃肿,而且难以读懂。下面是UNIX fork函数的错误检查。if( ( pid = fork() ) < 0){ fprintf( stderr, "fork error: %s\n", strerror( errno )); exit(0);}通过定义下面的错误报告函数(error-reporting function),可在某种程度上简化代码。void unix_error(char *msg){ fp 阅读全文

posted @ 2014-02-28 10:41 奇好猫 阅读(607) 评论(0) 推荐(0) 编辑

2014年2月26日

几个时间复杂度O(logN)的算法

摘要: 1 二分查找算法int BinarySearch(const ElementType A[], ElementType X, int N){ int mid, right, left; right = 0; left = N - 1; while(right X) left = mid - 1; else if(A[mid] 0){ 6 Rem = M % N; 7 M = N; 8 N = Rem; 9 } 10 11 return M;... 阅读全文

posted @ 2014-02-26 09:58 奇好猫 阅读(17186) 评论(3) 推荐(0) 编辑

2014年2月24日

程序加载器如何工作的?

摘要: UNIX系统中,每个程序都运行在一个进程上下文中,有自己的虚拟地址空间。如图:内核虚拟存储器用户栈(向下增长)共享库的存储器映射运行时堆(4KB对齐)(向上增长)数据段(.data .bss)(4KB对齐)代码段(.init .text .rodata)(4KB对齐)未使用外壳运行一个程序时,父进程生成一个子进程,它是父进程的一个复制品。它通过调用execve来启动加载器。加载器删除子进程现有的虚拟存储器段,并创建一组新的代码、数据、堆和栈。堆和栈被初始化为0。通过将虚拟地址空间中的页映射到可执行文件中页大小的片。新的代码和数据段被初始化为可执行文件的内容。最后,加载器跳转到_start地址( 阅读全文

posted @ 2014-02-24 16:03 奇好猫 阅读(441) 评论(0) 推荐(0) 编辑

最大连续子序列和及其起始位置(未测试)

摘要: /******************************问题描述:求一个序列中的最大连续子序列和以及起始位置。若全为负数,则返回0。*******************************/int start, end;start = end = 0;/******************************算法名称:枚举法简述:列举所有可能的序列,并求和。前缀相同的序列重复求和, 违背了“同一个数最多计算一次”的原则,导致复杂度上升。复杂度分析:T(N) = =时间复杂度:O()******************************/int Sum1(const int 阅读全文

posted @ 2014-02-24 10:54 奇好猫 阅读(675) 评论(0) 推荐(0) 编辑

导航