第4章 启动Linux内核
envp_init[],把命令行参数填入数组argv_init[]。 9. 调用console_init()初始化控制台。调用con_init()初 始化显示器。
10. 调用init_modules初始化内核模块kernel_module。 设置symbol_table表的大小。
图4.1 start_kernel()执行流程框图
下面对图4-1给出的start_kernel()函数执行
流程进行说明:
1. 首先调用printk()显示Linux版本号、gcc版本
号和启用时间等。如果系统启动失败,将为 用户提供一些参考信息。 2. 调用setup_arch()初始化系统主板上的各个集 成电路控制器。它的主要任务有:
start_kernel()函数的执行流程如图4-1所示。
S 调用printk()打印Linux版本信息和编译内核时所使用的gcc版本。 调用setup_arch(),继续初始化系统低端硬件结构并获取硬设备参数。 调用paging_init(),初始化系统内核使用的页表。 调用trap_init(),设置各种门描述符和0号进程的TSS描述符以及LDT 系统段描述符。
11. 用if语句初始化prof_buffer缓冲区。系统使用该
缓冲区记录自己的行踪以及执行了哪些操作。 12. 调用keme_cache_init()初始化内存分配器slab。 13. 调用sti()函数将标志寄存器中的IF位置成1,接收 时钟中断。调用calibrate_delay()测试机器的 BogoMIPS值并显示。
00 00 CF CF CF CF 00 00 40 40 00 40 00 00
00 00 9A 92 FA F2 00 00 92 9A 9A 92 89 82
00 00 00 00 00 00 00 00 00 00 00 00 UU UU
00 00 00 00 00 00 00 00 00 00 00 00 UU UU
3. 调用paging_init()初始化页表。它完成的任务有: 调整memory_start对齐下一个可用页边Байду номын сангаас。
将页目录的第0个目录项置为0,第一个页表开始
生效,允许用户进程使用0到4194303 之间的线 性地址。 初始化页目录前768个目录项所对应的页表表项。 具体操作如下:
1) 将页目录的属性字由0x007改为0x067。 2) 使页表指针指向内核虚拟地址0xC0102000。 3) 把页表表项的属性字置为0x063。拒绝用户态进
程访问内核地址空间。 4) 填写从虚拟地址0xC0102000开始的页表表项。 5) 刷新转换后备缓冲器(TLB)。 6) 重置未使用的内存边界start_mem和end_mem 值,并从paging_init()返回。
4. 调用trap_init()初始化中断描述符表IDT。它调 用set_trap_gate()和set_system_gate()函数完成
调用setup_x86_irq(),把IRQ2和IRQ3所对应
的中断服务程序的偏移量分别装入其各自的 中断门描述符中。 IRQ2用于主从控制器之 间的级联。IRQ3用于连接外部协处理器。
6. 调用sched.c为执行进程调度做准备。初始化内核 数组bh_base[],分别将定时器队列、设备队列和 即时队列填加到数组bh_base[]中。 7. 调用time_init()初始化系统时钟和日期。从CMOS 中读取时间并显示在屏幕上。调用setup_x86_irq() 把时钟中断服务程序的偏移量(0x20:定时器中断 必须连到IRQ0线)装入其中断门描述符中。
调用fill_table_init(),建立filpSLABcache。 调用ipc_init(),初始化信号量消息和共享内存。 调用dquot_init_hash(),建立磁盘配额缓冲区。 调用check_bugs(),检查cpu和fpu。屏幕显示信息“POSIX confoumance testing by UNIFIX”。 调用kernel_tread(),为进程创建一个内核栈,该系统调用返回 后,父进程执行0号进程。子进程则执行init()函数 是父进程吗? 1号进程: init()函数。 0号进程: cpu_idle()函数
┇
图4.6 内存中的全局描述符表 00 00 00 00 00 00 00 00 106205FH
5. 调用init_IRQ()设置基准时钟和IDT中断门描述 符。中断门描述符由函数set_intr_gate()设置,
用实际的中断门描述符代替实模式下临时使用 的中断门描述符。过程如下:
把主从8259中断控制器提供的硬中断号所对 应的中断门全部填入中断描述符表。中断门 属性字为0x8E00。中断门描述符格式如下:
31 16 15 属性字 0
偏移量
0x10
0x8E00 偏移量
中断门格式
为主从8259中断控制器申请I/O地址,主从 8259的I/O地址分别是0x20和 0xA0 。
为8253(或8254)定时器/计数器设置计时初 值为11933=0x2E9C,每10ms产生一次定时 中断。Linux系统将10ms时间间隔叫做一个 节拍(tick)。
U 调用mem_init(),初始化页描述符,标记已被占用的页面,显示测 试结果。 调用keme_cache_size_init(),初始化slab内存分配器。
调用proc_root_init(),对根文件系统各数据结构进行初始化。
调用uidcache_init(),建立uid使用的cache。
调用filescache_init()建立文件缓存调用dcache_init()建立dentry cache。
描述符格式如下图所示:
基址31-24 限长0x0
基址15-0
0x89
基址23-16
基址31-24 限长0x0 基址15-0
0x82
基址23-16
限长=0xEB
限长=0x3FF
基址=&init_task.tss
a) 0号进程的任务状态段描述符TSS
基址=&default_ldt
b) 0号进程的局部描述符LDT
00 00 00 00 00 00 00 00 00 00 00 00 UU UU
00 00 FF FF FF FF 00 00 00 00 00 00 00 03
0 00 00 FF FF FF FF 00 00 00 00 00 00 EB FF
内存地址 106000H
12个描述符
106058H 106060H 106008H
对各种门描述符的设置。
系统共设置19个陷阱门描述符。其中14个陷阱 门特权级DPL=0,属性字为0x8F00,供内核使 用。其余4个陷阱门特权级DPL=3,属性字为 0xEF00,内核与用户均可使用。
陷阱门描述符格式如下:
31
16 15 属性字 0 31 16 15 属性字 0
偏移量
0x10
0x8F00 偏移量
第4章 启动Linux内核
本章研究的基本问题
初始化内核使用的数据结构。 创建为系统提供特定服务的各种内核线程。 init函数和init进程。 Shell脚本文件。 终端进程的生成。
4.1 初始化系统内核
完成初始化内核任务的函数是start_kernel()。 当系统执行start_kernel()函数时,标志着核
调用vma_init(),建立vm_area_struct和mm_struct缓存。
调用buffer_init(),建立buffer_headSLAB cache。
调用signals_init(),建立signal队列缓存。 V
V
调用inode_init()初始化hash_table表,把first_inode置为 NULL。
图4-5 0号进程的系统描述符格式
把0号进程的TSS和LDT描述符在GDT中的偏移
量0x60和0x68分别装入TR和LDTR。全局描述符 表如下图所示:
基址 GDTR 47
16 15 0
00 10 60 00H
205FH
TR
0060H
LDTR
0O68H
00 00 00 00 00 00 00 00 00 00 00 00 UU UU
获取外设参数:将硬盘、鼠标、显示器、根设
备的主从设备号、高级电源管理以及总线类型 等参数,写入相应的内存单元。 如果设置了RAM盘,将其参数写入相应的内 存单元 。
设置init_task.mm代码在内存的起点和终点以
及数据段的终点。 把命令行参数拷贝到savd_command_line变量 中。分析并排除“mem=”形式的命令。 获取CPU类型,以确定是否支持扩展分页。随 后调整内存边界参数start_mem。 调用request_region()为主板上的I/O芯片申请 I/O内存使用空间。I/O芯片包括timer定时器/ 计数器、DMA控制器1、DMA控制器2以及协 处理器fpu。
偏移量
0x10
0xEF00 偏移量
a) 内核使用的陷阱门
b) 内核与用户均可使用的陷阱门
图4-3 陷阱门描述符格式
设置调用门描述符(call gate)。属性字为 0xEC00,偏移量是lcall7程序的基址。这个 系统调用接口是为POSIX标准兼容而设计 的,实际上没有使用。
调用门描述符格式如下:
17. 调用uidcache_init()创建用户进程标识符缓存。
说明:BogoMIPS值供设备驱动程序使用。该值 的含义是:当内核发出读设备请求后,要等多少
时间才能从设备接收到所请求的信息。例如对文 件系统进行初始化前要先计算BogoMIPS值。
U-Boot启动流程(Linux内核)的分析
U-Boot启动流程(Linux内核)的分析U-Boot启动流程(Linux内核)的分析(一)(2010-05-06 21:05)分类:Bootloader前面一段时间一直在移植U-Boot,Linux内核和构建根文件系统,其中有些地方还不是很明白,现在回过头来,理解一下U-boot的启动流程,以及 u-Boot是如何加载引导内核启动的。
这里的分析也都是以U-Boot-2009.08版本为基础的,可能会和以前的版本有所不同。
在这里也不打算一句句分析U-Boot的源码,只是想把U-Boot一步一步怎么最终能够加载Linux内核的过程,分析一下。
首先,我们应该理解Bootloader是什么?它有什么作用?其实它就是系统上电后运行的和小段程序。
1 BootLoader的概念在系统上电后,需要一段程序来进行初始化:关闭WATCHDOG,改变系统时钟,初始化存储控制器,将更多的代码复制到内存中。
并将操作系统内核复制到内存中运行,这就段程序代码就叫做Bootloader。
没有一个Bootloader完全支持所有CPU,所以我们要想使用Bootloaser一般情况下要自己进行修改,我们可以增强Bootloader的功能,让它具有网络功能,可以通过NFS远程下载Linux内核和根文件系统,可以烧写Linux 内核和根文件系统到NandFlash中,而这些功能对于最终的用户来说是没有什么意义的,它们看到的只是Bootloader引导Linux内核启动这一个功能,而其余的功能只对开发人员很有用处。
也就是说在开发期间这些功能是必不可少的。
(1)启动加载模式:这种模式也称为“自主”模式。
也就是Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入,这种模式是在嵌入式产品发布里的通用模式。
(2)下载模式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件,例如:下载内核映像和根文件系统映像等。
linux系统启动概述
=============linux系统启动概述============当用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备(通常是硬盘)启动,接着启动设备上安装的引导程序lilo或grub开始引导Linux,Linux首先进行内核的引导,接下来执行init程序,init程序调用了rc.sysinit和rc 等程序,rc.sysinit和rc当完成系统初始化和运行服务的任务后,返回init;init启动了mingetty后,打开了终端供用户登录系统,用户登录成功后进入了Shell,这样就完成了从开机到登录的整个启动过程。
=============linux启动步骤祥解============第一部分:内核的引导(核内引导)Red Hat9.0可以使用lilo或grub等引导程序开始引导Linux系统,当引导程序成功完成引导任务后,Linux从它们手中接管了CPU的控制权,然后CPU 就开始执行Linux的核心映象代码,开始了Linux启动过程。
这里使用了几个汇编程序来引导Linux,这一步泛及到Linux源代码树中的“arch/i386/boot”下的这几个文件:bootsect.S、setup.S、video.S等。
其中bootsect.S是生成引导扇区的汇编源码,它完成加载动作后直接跳转到setup.S的程序入口。
setup.S的主要功能就是将系统参数(包括内存、磁盘等,由BIOS返回)拷贝到特别内存中,以便以后这些参数被保护模式下的代码来读取。
此外,setup.S还将video.S中的代码包含进来,检测和设置显示器和显示模式。
最后,setup.S将系统转换到保护模式,并跳转到 0x100000。
那么0x100000这个内存地址中存放的是什么代码?而这些代码又是从何而来的呢?0x100000这个内存地址存放的是解压后的内核,因为Red Hat提供的内核包含了众多驱动和功能而显得比较大,所以在内核编译中使用了“makebzImage”方式,从而生成压缩过的内核,在RedHat中内核常常被命名为vmlinuz,在Linux的最初引导过程中,是通过"arch/i386/boot/compressed/"中的head.S利用misc.c中定义的decompress_kernel()函数,将内核vmlinuz 解压到0x100000的。
linux启动流程-关机-启动模式-log
单用户模式下可以进行正常的系统维护(系统能够正常启动),而修 复(re scue)模式下可以对不能从硬盘独立启动的 Linux 系统进行手工修复。 进入修复模式之后,管理员可以: 修改系统不能正确启动的错误,如误编辑了启动相关的配置脚本(/e tc/inittab、/e tc/rc.d/rc.sysinit 等)。 执行相应的命令对硬盘中的系统进行修复。 当然在单用户模式下实施的系统维护工作在修复模式下也能做。
init 的处理流程
先取得 runlevel 亦即默认运行等级的相关等级 ; 使用 /etc/rc.d/rc.sysinit 进行系统初始化 根据runlevel级别 ,执行『LX:X:wait:/etc/rc.d/rc X』,其他行 则略过 配置好 [ctrl]+[alt]+[del] 这组的组合键功能 配置不断电系统的 pf, pr 两种机制; 启动 mingetty 的六个终端机 (tty1 ~ tty6) 最终以 /etc/X11/perfdm -nodaemon 启动图形介面. 自定义启动程序:/etc/rc.d/rc.local
单用户模式和修复模式
Linux 系统处于正常状态时,服务器主机开机(或重新启动)后,能 够由系统引导器程序自动引导 Linux 系统启动到多用户模式,并 提供正常的网络服务。如果系统管理员需要进行系统维护或系统出 现启动异常时,就需要进入单用户模式或修复模式对系统进行管理 了。使用单用户模式有一个前提,就是您的系统引导器(grub) 能正常工作,否则要进行系统维护就要使用修复模式。 Linux 系统中不同的运行级别(R un Le ve l)代表了系统的不同 运行状态,例如 Linux 服务器正常运行时处于运行级别3,是能 够提供网络服务的多用户模式;而运行级别 1 只允许管理员通过 服务器主机的单一控制台进行操作,即“单用户模式”。 当管理员对 Linux 系统进行维护时,有时不希望 Linux 系统对外 提供任何的网络服务,因此单用户模式正好能够满足系统管理员进 行系统维护的需要。
linux的启动过程简单描述
linux的启动过程简单描述
1.BIOS自检:在计算机开机时,BIOS首先会进行自检。
它会检查计算机硬件是否能够正常运行,并确定启动设备的顺序。
2. 引导加载程序:BIOS会从硬盘或其他存储设备中找到引导加载程序,并将其加载到内存中。
引导加载程序通常是Grub或Lilo。
3. 内核加载:引导加载程序会加载Linux内核,将其放入内存中,并启动它。
内核负责管理计算机的硬件和软件资源,并为其他程序提供服务。
4. 初始化进程:内核启动后,会启动一个称为init的进程。
它是Linux系统中的第一个用户级进程,负责初始化系统。
init会读取/etc/inittab文件,并根据其中的配置启动其他进程。
5. 运行级别:Linux系统有七个运行级别,每个级别具有不同的功能和服务。
init根据/etc/inittab文件中的设置,选择一个运行级别,并启动相应的进程和服务。
6. 系统服务:在选择的运行级别下,init会启动各种系统服务,例如网络服务、文件系统服务和远程登录服务等。
7. 登录:最后,init会提供一个登录提示符,用户可以输入用户名和密码登录系统。
以上是Linux的启动过程简单描述,这些步骤确保了系统能够顺利地启动,并为用户提供各种服务和功能。
- 1 -。
linux启动流程
linux启动流程Linux启动流程是指在计算机启动时,操作系统的加载和初始化的一系列过程。
具体的启动流程可以分为以下几个步骤。
1. BIOS(Basic Input/Output System)自检:当计算机启动时,首先会运行内置的基本输入/输出系统(BIOS)进行自检。
BIOS会检测计算机中的硬件设备,并初始化这些设备。
2. 主引导记录(MBR)加载:接着,计算机会加载位于硬盘的主引导记录(MBR)。
MBR是位于硬盘的第一个扇区,其中包含了引导加载程序(Bootloader)的信息。
3. 引导加载程序运行:MBR加载完成后,引导加载程序就开始运行。
常用的引导加载程序有GRUB(GRand Unified Bootloader)和LILO(Linux Loader)等。
引导加载程序会读取硬盘上的操作系统及其内核的位置,并将控制权转移到操作系统的加载程序。
4. 内核加载:引导加载程序会读取操作系统的内核,并加载到内存中。
内核是操作系统的核心部分,负责管理计算机的硬件资源和进程管理。
5. 初始化ramdisk:操作系统内核加载完成后,会解压缩和初始化ramdisk。
ramdisk是虚拟的磁盘,用于提供操作系统初始化所需的文件和目录结构。
6. 初始化系统:操作系统内核会运行init进程,这是系统的第一个用户级进程。
init进程根据指定的运行级别,初始化各个系统服务和进程。
运行级别定义了系统启动时要运行的服务和进程的类型。
7. 启动系统服务:在指定的运行级别下,init进程会依次启动各个系统服务,如网络服务、打印服务、文件系统服务等。
这些服务的启动是根据配置文件中的设置进行的。
8. 用户登录:系统服务启动完成后,操作系统进入用户登录界面。
用户可以输入用户名和密码进行登录。
9. 初始化用户环境:当用户成功登录后,系统会初始化用户的环境,包括创建用户的进程、加载用户的配置文件等。
10. 启动默认图形界面:如果系统启动时设置了默认的图形界面(如GNOME、KDE等),则系统会自动启动默认的图形界面,并将控制权交给图形界面管理器。
linux的启动流程详解
linux的启动流程详解linux启动流程⼀、第⼀阶段:BIOS上个世纪70年代初,"只读内存"(read-only memory,缩写为ROM)发明,开机程序被刷⼊ROM芯⽚,计算机通电后,第⼀件事就是读取它。
这块芯⽚⾥的程序叫做"基本輸出輸⼊系統"(Basic Input/Output System),简称为BIOS。
1.1 硬件⾃检BIOS程序⾸先检查,计算机硬件能否满⾜运⾏的基本条件,这叫做"硬件⾃检"(Power-On Self-Test),缩写为POST。
如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中⽌。
如果没有问题,屏幕就会显⽰出CPU、内存、硬盘等信息。
1.2 启动顺序硬件⾃检完成后,BIOS把控制权转交给下⼀阶段的启动程序。
这时,BIOS需要知道,"下⼀阶段的启动程序"具体存放在哪⼀个设备。
也就是说,BIOS需要有⼀个外部储存设备的排序,排在前⾯的设备就是优先转交控制权的设备。
这种排序叫做"启动顺序"(Boot Sequence)。
打开BIOS的操作界⾯,⾥⾯有⼀项就是"设定启动顺序"。
⼆、第⼆阶段:主引导记录BIOS按照"启动顺序",把控制权转交给排在第⼀位的储存设备。
这时,计算机读取该设备的第⼀个扇区,也就是读取最前⾯的512个字节。
如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以⽤于启动;如果不是,表明设备不能⽤于启动,控制权于是被转交给"启动顺序"中的下⼀个设备。
这最前⾯的512个字节,就叫做"主引导记录"(Master boot record,缩写为MBR)。
2.1 主引导记录的结构"主引导记录"只有512个字节,放不了太多东西。
它的主要作⽤是,告诉计算机到硬盘的哪⼀个位置去找操作系统。
02_Linux启动与内核引导_201108310924
系统初始化阶段还会用到的配置文件
/etc/rc.d/*
rc.local 用户自定义开机启动程序 目录:rc 与 rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d 目录:/etc/rc.d/init.d/ 下的服务
关于模块: /etc/modprobe.conf /etc/sysconfig/*
GRUB can act as a two-stage bootloader
Stage 1 is installed in the MBR and is called by BIOS. Stage 2 is partially loaded by Stage 1 and then finishes loading itself from the filesystem.
• • • • • 系统主机名 网络设置 语系处理 文件系统格式 其他服务启动
配置文件:/etc/inittab (init table)
• 启动执行等级run level • 系统初始化
16
Run Level (共有七个等级)
/etc/inittab
什么是run level?
• 通过run level来设定系统使用不同的服务来启动,让Linux的使用环境不同
10
加载内核
/boot/grub/menu.lst
11
加载内核与initrd
12
加载内核
通过bootloader读取内核文件到内存,并解压缩
e.g., /boot/vmlinuz-2.6.18
开始执行内核检测各个外设
存储设备、CPU、网卡、声卡等 Linux内核重新检测一次硬件,而不一定会使用BIOS检测到 的硬件信息
Ubuntu Linux操作系统第3版(微课版)—第4章
使用fdisk进行分区管理
• 创建分区
命令(输入 m 获取帮助): p
#查看分区信息
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
Disk model: VMware Virtual S
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
• 分区也有助于更有效地使用磁盘空间。 分 分 • 每个分区在逻辑上可视为一个磁盘。 区 区
分区
卷卷 卷
• 高级格式化
• 在磁盘分区上建立相应的文件系统。 固态盘4K对齐
4.1 Linux磁盘存储概述
Linux磁盘设备命名
IDE接口
• dev/hda • dev/hdb • dev/hdc
• /dev/sda
4.1 Linux磁盘存储概述
第4章 磁盘存储管理 12
磁盘分区规划
• 分区类型:Linux与Linux Swap • Ubuntu至少需要一个Linux分区和一个Linux Swap分区。 • Native分区是存放系统文件的地方,只能使用ext文件系统。 • Swap分区是Linux暂时存储数据的交换分区。
第4章 磁盘存储管理 17
命令 o p q s t u v w x
说明 创建一个新的空DOS分区表 显示硬盘的分区表 退出fdisk,但是不保存 创建一个新的空的SUN磁盘标签 改变分区的类型号码
改变分区显示或记录单位
校验该磁盘的分区表 保存修改结果并退出fdisk 进入专家模式执行特殊功能
4.2 管理磁盘分区和文件系统
第4章 磁盘存储管理 19
4.2 管理磁盘分区和文件系统
linux 启动流程
linux 启动流程Linux启动流程。
Linux是一种开源的操作系统内核,其启动流程是整个系统运行的基础。
在了解Linux启动流程之前,我们需要先了解一些基本概念,比如BIOS、Boot Loader、内核和init进程等。
接下来,我们将详细介绍Linux的启动流程。
首先,当计算机开机时,BIOS(基本输入/输出系统)会被激活。
BIOS是一种固化在计算机主板上的固件,其作用是初始化硬件设备并加载操作系统。
BIOS会首先检测硬件设备,然后寻找启动设备,通常是硬盘或光盘。
一旦找到启动设备,BIOS会将控制权交给该设备上的引导加载程序(Boot Loader)。
Boot Loader是一个小型的程序,其作用是加载操作系统的内核。
在Linux系统中,最常见的Boot Loader是GRUB(GRand Unified Bootloader)。
GRUB会显示一个菜单,列出可用的内核版本和其他操作系统选项。
用户可以选择要启动的内核版本,然后GRUB会加载该内核并将控制权交给内核。
内核是操作系统的核心部分,负责管理系统的硬件资源、文件系统和进程。
当内核被加载后,它会初始化系统的硬件设备,建立起虚拟内存空间,并加载文件系统。
接下来,内核会启动init进程。
init进程是Linux系统的第一个用户级进程,其进程号(PID)始终为1。
init进程负责启动和管理系统中的所有其他进程。
在早期的Linux系统中,init进程是由SysVinit来管理的,而在现代Linux系统中,init进程通常由systemd来管理。
一旦init进程启动,它会读取配置文件并启动系统中的各种服务和进程。
这些服务和进程包括网络服务、文件系统挂载、日志记录等。
最终,init进程会启动一个用户登录界面或者直接进入命令行界面,等待用户输入。
总的来说,Linux的启动流程可以分为硬件初始化、Boot Loader加载内核、内核初始化和init进程启动四个阶段。
第四章 嵌入式Linux开发基础
(4)设备文件
Linux下所有的设备都是通过文件来表示的, 所有的设备文件都存放在/dev目录下,设备文 件的文件名就是设备名 设备文件的种类
块设备文件:/dev/hda1,这些设备以块为最小单位。 字符设备: /dev/ttyS0,字符设备按顺序一个一个传递字符 网络接口:访问网络接口的方法是给它们分配一个惟一的 名字(比如 eth0),但这个名字在文件系统中不存在对应 的节点项
GNU计划和自由软件基金会FSF(the Free Software Foundation)是由Richard M. Stallman于 1984年一手创办的,旨在开发一个类似UNIX、并 且是自由软件的完整的操作系统:GNU系统。各 种使用Linux系统为核心的GNU操作系统正在被广 泛地使用。 GNU项目开发了许多高质量的免费软 件,如emacs编辑系统、bash shell程序、gcc系列编 译器、gdb调试程序,等等。这些软件为Linux操 作系统的开发创造了一个合适的环境,称为Linux 能诞生的基础。Linux严格意义上应该被称为 GNU/Linux系统。
普通文件常见的类型
系统文件 .conf .lock .rpm 编程和脚本文件 .c .cpp .h .o .pl .py .so .sh .tcl 文件格式 .au .gif .html/.htm .jpg .pdf .png .ps .txt .wav .x pm 压缩以及归档文件 .bz2 .gz .tar .tbz .tgz .zip
相比于其它操作系统的优势
真正的多任务多用户 稳定性强 设备独立性 具有强大的网络功能 可靠的系统安全 良好的可移植性 应用软件多
