Linux复习大汇总

  • 格式:doc
  • 大小:86.50 KB
  • 文档页数:19

下载文档原格式

  / 19
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章概述

1、什么是POSIX标准,为什么现代造作系统的设计必须遵循POSIX标准?

答:POSIX表示可移植操作系统接口(Portable Operating System Interface)。

POSIX是在Unix标准化过程中出现的产物。

POSIX 1003.1标准定义了一个最小的Unix操作系统接口。

任何操作系统只有符合这一标准,才有可能运行Unix程序。

2、什么是GNU?Linux与GNU有什么关系?

答:GNU是GNU Is Not Unix的递归缩写,是自由软件基金会的一个项目。

GNU项目产品包括emacs编辑器、著名的GNU C和Gcc编译器等,这些软件叫做GNU 软件。

GNU软件和派生工作均适用GNU通用公共许可证,即GPL(General Public License)。

Linux的开发使用了众多的GUN工具。

3、Linux系统由哪些部分组成?Linux内核处于什么位置?

答:(1)符合POSIX标准的操作系统内核、Shell和外围工具。(2)C语言编译器和其他开发工具及函数库。(3)X Window窗口系统。(4)各种应用软件,包括字处理软件、图象处理软件等。

Linux内核是所有Linux 发布版本的核心。

第二章内存寻址

1、在80x86的寄存器中,哪些寄存器供一般用户使用?哪些寄存器只能被操作系统使用?答:通用寄存器EAX,EBX,ECX,EDX,EBP(基址指针),ESP(堆栈指针),ESI(扩展源指针),EDI(扩展目的指针),还有EFLAGS(标志寄存器).

专供操作系统使用的寄存器:IDTR中断描述符寄存器,GDTR全局描述符表寄存器,LDTR 局部描述符表寄存器,TaskRegisters任务寄存器,DebugRegister调试寄存器,ControlRegister 控制寄存器,Model-SpecificRegisters模型专用寄存器。

3、请用C语言描述段描述符表。

答:#include

#include

#define BASE_H 0xff00

#define BASE_M 0x00ff

#define BASE_L 0xffff

#define LIMIT_H 0x000f

#define LIMIT_L 0xffff

#define GRANULARITY 0x0080

#define SEGMENT_P 0x8000

#define SYSTEM_TYPE 0x1000

#define DPL 0x6000

#define TYPE_E 0x0800

#define TYPE_ED_C 0x0400

#define TYPE_RW 0x0200

#define TYPE_A 0x0100

struct {

unsigned char base_high;

unsigned char g : 1;

unsigned char other : 3;

unsigned char limit_high : 4;

unsigned char P : 1;

unsigned char dpl : 2;

unsigned char S : 1;

unsigned char E : 1;

unsigned char ED_C : 1;

unsigned char RW : 1;

unsigned char A : 1;

unsigned char base_middle;

unsigned short base_low;

unsigned short limit_low;

} gdt_t;

int main(int argc, char *argv[])

{

// int gdt[4] = {0x0fff, 0x0000, 0x9a00, 0x00c0} ; // 0x08

// int gdt[4] = {0x7fff, 0x0000, 0x9a01, 0x00c0} ; // 0x10

// int gdt[4] = {0x0002, 0x8000, 0x920b, 0x00c0} ; // display memory

// int gdt[4] = {0xffff, 0xffff, 0xffff, 0xffff} ; // test

int gdt[4] = {0x03ff, 0x0000, 0xf201, 0x00c0} ; // ldt0 unsigned int base, limit;

unsigned int granularity;

unsigned int present, dpl, system_type, segment_type; unsigned int type_e, type_ed_c, type_rw, type_a;

base = (gdt[3] & BASE_H) << 16;

base += (gdt[2] & BASE_M) << 16;

base += gdt[1] & BASE_L << 0;

limit = (gdt[0] & LIMIT_L) << 0;

limit += (gdt[3] & LIMIT_H) << 16;

granularity = (gdt[3] & GRANULARITY) >> 7;

present = (gdt[2] & SEGMENT_P) >> 15;

dpl = (gdt[2] & DPL) >> 13;

system_type = (gdt[2] & SYSTEM_TYPE) >> 12;

type_e = (gdt[2] & TYPE_E) >> 11;

type_ed_c = (gdt[2] & TYPE_ED_C) >> 10;

type_rw = (gdt[2] & TYPE_RW) >> 9;

type_a = (gdt[2] & TYPE_A) >> 8;

printf("base\t\t0x%x\t%d\n", base, base);

printf("limit\t\t0x%x\t%d\n", limit, limit);

printf("\n");

printf("G\t\t%d\t(0=bype, 1=4KB)\n", granularity);

printf("\n");

printf("P\t\t%d\n", present);

printf("DPL\t\t%d\n", dpl);

printf("S\t\t%d\t(0=system, 1=code or data)\n", system_type); printf("TYPE_E\t\t%x\n", type_e);

printf("TYPE_ED_C\t%x\n", type_ed_c);

printf("TYPE_RW\t\t%x\n", type_rw);