存档

文章标签 ‘总结’

Linux系统在个人计算机上的引导过程

2010年12月26日 没有评论

操作系统的大作业,网上收集的资料,总结如下

一、系统引导过程简介

系统引导过程主要由以下几个步骤组成(以硬盘启动为例)

  1. 开机
  2. BIOS加电自检(POST——Power On Self Test),内存地址为0fff:0000
  3. 将硬盘第一个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00处
  4. 检查(WORD)0000:7dfe是否等于0xaa55.若不等于则转去尝试其他介质;如果没有其他启动介质,则显示 “No ROM BASIC” ,然后死机
  5. 跳转到0000:7c00处执行MBR中的程序
  6. MBR先将自己复制到0000:0600处,然后继续执行
  7. 在主分区表中搜索标志为活动的分区。如果发现没有活动分区或者不止一个活动分区,则停止
  8. 将活动分区的第一个扇区读入内存地址0000:7c00处
  9. 检查(WORD)0000:7dfe是否等于0xaa55,若不等于则显示 “Missing Operating System”,然后停止,或尝试软盘启动
  10. 跳转到0000:7c00处继续执行特定系统的启动程序
  11. 启动系统

流程图如下

Linux引导过程

当系统首次引导时,或系统被重置时,处理器会执行一个位于已知位置处的代码。在个人计算机(PC)中,这个位置在基本输入/输出系统(BIOS)中,它保存在主板上的闪存中(内存地址为0fff:0000),完成以上步骤中(2),(3),(4),(5)。

当找到一个引导设备之后,第一阶段的引导加载程序就被装入 RAM 并执行。这个引导加载程序MBR在大小上小于 512 字节(一个扇区),其作用是加载第二阶段的引导加载程序,完成以上步骤中(6),(7),(8),(9),(10)。

当第二阶段的引导加载程序被装入 RAM 并执行时,通常会显示一个动画屏幕,并将 Linux 和一个可选的初始 RAM 磁盘(临时根文件系统)加载到内存中。在加载映像时,第二阶段的引导加载程序就会将控制权交给内核映像,然后内核就可以进行解压和初始化了。在这个阶段中,第二阶段的引导加载程序会检测系统硬件、枚举系统链接的硬件设备、挂载根设备,然后加载必要的内核模块。完成这些操作之后启动第一个用户空间程序(init),并执行高级系统初始化工作。

这就是 Linux 引导的整个过程。现在让我们深入挖掘一下这个过程,并深入研究一下 Linux 引导过程的一些详细信息。

阅读全文...

分类: Linux笔记 标签:

重载+操作符 C++

2010年4月24日 没有评论

今天上c++课,老师讨论到的问题,在这里做下笔记

1
2
3
4
5
6
7
8
9
10
11
12
13
//comple.h
class comple
{
    friend comple operator+(const comple& lhs,const comple& rhs);
public:
    comple(void);
    comple(int);
    ~comple();
    comple(const comple& orig);
private:
    int real;
 
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//comple.cpp
#include "stdafx.h"
#include <iostream>
#include "comple.h"
using namespace std;
comple::comple( void )
:real(0)
{
    cout<<this <<" of "<<this->real <<" constructor is called"<<endl;
 
}
 
comple::comple( int a)
:real(a)
{
    cout<<this <<" of "<<this->real<<" constructor is called"<<endl;
 
}
 
comple::comple( const comple& orig )
{
    cout<<this <<" of "<<orig.real<<" assignment is called"<<endl;
    this->real = orig.real;
}
comple::~comple()
{
    cout<<this <<" of "<<this->real<<" destructor is called"<<endl;
 
 
}
comple operator+(const comple& lhs,const comple& rhs)
{
    cout<< "operator+ is called"<<endl;
    comple a(lhs.real+rhs.real);
    return a;
}
1
2
3
4
5
6
7
8
9
10
11
12
//main.cpp
#include "stdafx.h"
#include "comple.h"
#include <iostream>
 
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    comple a(2);
    a+5;
    return 0;
}

程序输出

001CFB90 of 2 constructor is called
001CFAAC of 5 constructor is called
operator+ is called
001CFA70 of 7 constructor is called
001CFAB8 of 7 assignment is called
001CFA70 of 7 destructor is called
001CFAB8 of 7 destructor is called
001CFAAC of 5 destructor is called
001CFB90 of 2 destructor is called

解释下这个程序的执行过程:首先调用带int的构造函数,然后执行a+5时,编译器会自动调用带int的构造函数对5进行隐式转化。接下来调用operater+,在这个函数中实例化了一个匿名对象,并将该对象复制一份返回。该函数结束后销毁局部栈上的变量,首先销毁复制的实例,再销毁匿名实例(先进后出)。程序结束后,销毁在本地栈上的元素。

能不能在comple后面加&,即返回comple的引用。这样做是不行的,因为a是在局部栈上创建的变量,当该函数结束时,局部栈被销毁,即a被销毁,那么返回的对象将指向未知的内存;

如果变量是创建在堆上,那么可以返回该变量的引用,因为堆上的变量时需要程序员手动销毁的。

分类: 编程相关 标签: ,

对2009年的学习回顾

2010年1月1日 没有评论

一个未曾涉足计算机领域的我想要在计算机专业上站稳脚步,不但需要让自己知识不断扩充,还需要拥有一计之处。

一开始觉得大家每天上网都在浏览各式各样的网页,带着好奇心想从网页制作入手。朋友给我指点了入门之道,先让我熟悉Dreamweaver的使用,了解网站设计与建设的基本知识。大一下学期选了火爷的网站设计与制作的课,火爷讲的东西与实际互联网上的网页根本不是一回事,但当是一次“扫盲”活动吧。

想要做出符合3WC标准的网页,学CSS是必不可少的,于是我又开始研究起CSS来,在网上买了本《CSS商业网站布局之道》。当自己想练习写一个简单漂亮的网站出来时,需要一些图片的搭配,可网上找的图片都不符合自己要求,朋友也想让我学PS帮他做logo,于是乎,我把css丢在一边,开始学起ps。到现在我都很羡慕那些能做出精美图片的人,原因很简单,我的审美很差,一个看似简单的东西,但是就是调不出那种我要的效果——对颜色的把握不好。

而后,我把焦点转到了编程上,无论是培养一个人的思维方式还是提高对编程的熟练度和算法的运用,编程在计算机专业有着举足轻重的地位。开始在poj上刷题,刷到现在是60多道。其实刷题还有一个原因,那就是我想参加珠海赛,但当得知参加珠海赛的队伍有能力去参加省赛时队伍的成员是不能改变的,我就开始纠结了,跟我组队的成员肯定能参加省赛,参加省赛意味着我必须接受长达4个月的训练,且我又不想扎根于编程中,毕竟我的方向不在编程上。

恩,继续转移学习的方向——PHP与数据库的操作,因为之前无聊的时候看过关于php的书,只是缺乏动手经验,所以刚开始写些小小的程序还是比较容易的。朋友的主意比较多,让我写些符合他要求的小程序,他的要求刚好在我的能力范围内,也能让我逐渐接触新知识。我现在学会的也只是对PHP跟数据库最基本的运用。

从网页——PS——编程——PHP与数据库,每一门都是刚刚入门然后就放弃,于是我成了那种啥也了解一点,但是啥也不精。还有半年的时间让我鼓捣我感兴趣的东西,因为大三的时候或许会更早,开始学网络方面的东西。我要把重点学习的东西放在PHP和数据库上,半年时间肯定不能让我成为什么php大师,但是起码应该做到脱掉菜鸟称号吧。

2010年已经起航,希望在这一年能有更大的进步。

分类: 生活琐事 标签: ,

ACM女生赛总结

2009年12月27日 没有评论

参加了学院组织的女生赛,拿了个第一名。名次已经不重要了,重要得是得到了什么经验与教训。

粗心,是我的一个最大缺点 。

去年的新生赛B题就因为没仔细看题,没理解清题意,就在那做题,结局肯定很悲剧的。这次依旧,看题不仔细,做出来不检查就想直接提交通过。

A题,输出的时候没有多加中括号,加了中括号后,判断输出时还写错,交了3次才过。E 题,开始提交的时候没有写头函数,第二次提交发现多加了system("pause");,改过来后提交发现答案错误,检查发现没加'\0',觉得加了' \0'应该对了,于是就赶紧提交,其实这连样例输出都没过,因为我直接把输出的字符串检查略过,看最后统计的结果,连交了5次,还是没A掉。比赛结束后,朋友跟我说你是不是看题又不仔细,没看到这里有“(如果两个字符串完全相同的情况就不叫山寨)”,恩,我再次悲剧了。一开始看题是仔细看了,看到做题的时候就把这条件给忘了。

还发现,无论看什么东西,很容易跳过符号,即算看了也压根没引起重视。

不能老在同一地方跌倒,吸取教训~~

好像这是最后一届女生赛,发下图片记录下

ACM

分类: 生活琐事 标签: ,