摘要: 内核态和用户态 CPU的指令分为特权级指令和非特权级指令,特权级指令通常是一些比较危险的指令,这类指令的滥用可能会造成系统崩溃等灾难,所以特权级指令只允许操作系统及其相关模块使用,普通应用程序不能使用这类指令。Intel X86架构的CPU将特权等级分为4个级别:RING0,RING1,RING2,RING3。操作系统通过区分用户态和内核态来保证特权级指令不被错误的使用。 内核态与用户态是操作系统的两种运行级别,Linux没有使用Ring1和Ring2,而仅仅使用了Ring3级别运行用户态,Ring0作为内核态,Ring3状态不能访问Ring0的地址空间,包括代码和数据。一个Linux... 阅读全文
posted @ 2013-03-14 20:07 没有113 阅读(607) 评论(0) 推荐(0)
摘要: 1. make命令和makefile文件 makefile关系到整个工程的编译规则,一个工程中的源文件不计其数,按照类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,那些文件需要后编译;当有文被修改时,哪些文件需要重新编译;甚至更复杂的功能操作,makefile就像一个shell脚本,其中也能执行操作系统命令。makefile带来的最大好处是”自动化编译“,一旦写好makefile文件,只需要一个make命令,整个工程完全自动编译。 make是一个命令工具,用于解释makefile文件。大多数的IDE都自带了类似的命令。make命令执行时,需.. 阅读全文
posted @ 2013-01-30 21:22 没有113 阅读(368) 评论(0) 推荐(0)
摘要: 1. cc/gcc/g++/CC gcc和g++都是GUN(组织)的编译器。gcc主要用于C语言程序编译,而C++语言通常使用g++进行编译。linux下cc一般是一个符号连接,指向gcc;而CC则一般是makefile里面的一个变量。通常makefile中会定义 "CC = gcc"cc是Unix系统的C Compiler,而gcc则是GNU Compiler Collection,GNU编译器套装。gcc原名为Gun C语言编译器,因为它原本只能处理C语言,但gcc很快地扩展,包含很多编译器(C、C++、Objective-C、Ada、Fortran、 Java)。因此 阅读全文
posted @ 2013-01-29 21:48 没有113 阅读(736) 评论(0) 推荐(0)
摘要: 首先,编写最简单的C++代码并保存为main.cpp:Hello word1 #include <iostream>2 using namespace std;3 4 int main(int argc, char* argv[])5 {6 cout << "Hello world!" << endl;7 return 0;8 }使用命令g++ main.cpp,将会编译连接得到可执行文件a.out,(这里需要明确的是g++会调用gcc,而gcc实际上包装了后台一些程序,根据不同的参数去调用相应的程序进行处理)。事实上从源文件main.c 阅读全文
posted @ 2013-01-28 17:25 没有113 阅读(1036) 评论(0) 推荐(0)