Linux操作系统与程序设计1_第1页
Linux操作系统与程序设计1_第2页
Linux操作系统与程序设计1_第3页
Linux操作系统与程序设计1_第4页
Linux操作系统与程序设计1_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux操作系统与程序设计1第一页,共71页。●教学目标:掌握Linux系统组成特点、常用命令和使用方法;深入了解和掌握Linux系统的内部结构、编译、调试和运行系统程序的方法;对Linux操作系统建立一个全面、系统的认识,进而初步掌握Linux程序设计方法,为进一步学习和应用打下基础。

●教学主要内容:Linux系统基本使用,shell及其编程,Linux文件系统,多进程与多线程程序设计,进程间通信

●教学时数:讲解辅助下的实验32学时

第二页,共71页。第一讲Linux简介

初步掌握Linux系统安装、实验环境构建和基本特点。第三页,共71页。

Linux概述Linux网络操作系统

1990年,LinusTorvalds在一台386AT计算机上,根据AndrewS.Tanenbaum教授的MINIX开发的一个OS内核。两个进程交替运行,分别打印A和B增加驱动程序、文件系统第四页,共71页。Linux发展迅速第五页,共71页。Linux的应用发展方向超级计算机系统通用计算机系统嵌入式计算机系统Linux与Unix的关系POSIX标准(1990/1996)PortableOperatingSystemInterfaceofUNIXUNIX标准之争的产物,描述了系统调用、编程接口API、Shell机制和基本命令集、实时性、信号量机制等设计操作系统许多方面的规范。第六页,共71页。自由软件自由软件基金会(FSF–FreeSoftwareFoundation)RichardM.Stallman–FSF创始人自由软件是指其使用者对该软件有使用、复制、分发、研究、改写、再利用的自由。自由是关乎权利,而非价格Free指“自由”,而不是“免费”Linux与自由软件和开源软件第七页,共71页。自由权利自由之一:不论目的为何,都有使用该软件的自由。自由之二:有研究该软件如何工作的自由,并且可以改写软件,以符合使用者的需求。

前提:可以获得该软件的源代码。自由之三:有重新散布该软件的自由,所以每个人都可以通过分发自由软件来帮助他人。自由之四:有改进该软件的自由,并且公开发布软件的改进版本,使整个社群都可以受益。

前提:获得该软件的源代码。一般在软件许可(License)中说明。第八页,共71页。GNU项目GNU’sNotUnix(有点奇怪?是什么意思呢?)GNUGPL–GNUGeneralPublicLicenseGNU读作g-nooGNU是一个类Unix操作系统采用Linux作为内核RichardStallman专门写了一篇文章讲述来试图澄清Linux与GNU项目的关系:《LinuxandtheGNUProject》典型的桌面环境:GNOME,KDE第九页,共71页。第十页,共71页。开源软件OpenSource是一种软件开发方法旨在保证更好的质量、更高的可靠性、更大的灵活性、更低的费用,结束软件开发公司对使用者所进行的“掠夺”。开源也有自己的许可,其中重要的一条就是开源软件要公开源代码,这个许可尚处于讨论之中。第十一页,共71页。第十二页,共71页。Linux特点类Unix(Unix-like)操作系统其他类UNIX系统包括Solaris、MacOS等基于GPL(GNUPublicLicense)的自由操作系统第一个版本发行于1991年主要用C语言编写,部分代码用汇编语言编写“Linux”在不同语境下的内涵不同Linux内核、Linux系统、Linux开发套件等严格来说,Linux指由LinuxTorvalds维护(及通过主要镜像网站发布)的内核第十三页,共71页。14Linux发展史1991年11月,芬兰赫尔辛基大学的LinusTorvalds编写了一个小程序(取名为Linux),发布在互联网上希望借此实现一个操作系统“内核”1993年一批高水平网络黑客参与,诞生Linux1.0版1994年Linux的第一个商业版Slackware问世1996年美国国家标准技术局计算机系统实验室确认Linux版本1.2.13符合POSIX标准2001年Linux2.4版内核发布2003年Linux2.6版内核发布Linux简介第十四页,共71页。15Linux操作系统特征符合POSIX标准规范的操作系统PortableOperationSystemInterfaceofUnix:可移植的操作系统接口由IEEE开发,ANSI和ISO标准化具备现代操作系统的基本功能抢占式多任务处理,支持多用户图形用户接口异构硬件支持支持SMP支持TCP/IP多体系结构支持,支持32/64位CPU拥有其他操作系统没有的特色NFS、VFS、高效的EXT系列文件系统等

Linux简介第十五页,共71页。代表一种开源文化免费软件,开放源代码自由软件,可在原有程序基础上开发自己的程序GNU/LinuxLinux仅指Linux内核Linux系统的大部分应用都建立在GNU软件之上核心结构Linux内核LinuxShellLinux文件系统Linux应用系统GNUTools16Linux精髓Linux简介第十六页,共71页。17Linux的系统结构用户应用程序系统调用硬件资源管理接口Shell,库函数内核实现Linux简介用户态核心态第十七页,共71页。不区分的缺陷用户直接修改操作系统的数据用户直接调用操作系统的内部函数用户直接操作外设用户任意读/写物理内存区分的意义禁止用户程序和底层硬件直接打交道如果用户程序往硬件控制寄存器写入不恰当的值,可能导致硬件无法正常工作禁止用户程序访问任意物理内存,否则可能会破坏其他程序的正常执行如果对核心内核所在的地址空间写入数据,会导致系统崩溃18划分用户态/内核态的必要性Linux简介第十八页,共71页。现代CPU都有几种不同指令执行级别在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态在相应低级别执行状态下,代码的掌控范围会受到限制,只能在对应级别允许的范围内活动举例intelx86CPU有四种不同的执行级别0-3Linux只使用0级和3级分别表示内核态和用户态19CPU对用户态/和心态划分的支持Linux简介第十九页,共71页。cs寄存器最低两位表明当前代码的特权级CPU每条指令的读取都是通过cs:eip这两个寄存器cs:代码段选择寄存器eip:偏移量寄存器上述判断由硬件完成在Linux中,地址空间是一个显著的标志0xc0000000以上地址空间:只能在内核态下访问0x00000000~0xbfffffff的地址空间:两种状态下都可访问注意,这里的地址空间是逻辑地址而不是物理地址20用户态/和心态的区分方法Linux简介第二十页,共71页。Linux是单内核、多模块系统Linux内核运行在单独的内核地址空间所有操作系统功能作为一个模块实现在其内核中模块均运行在内核态,直接调用函数,无需消息传递具备模块化设计、抢占式内核(Linux2.6支持,Linux2.4用户级抢占)、支持内核线程及动态装载内核模块的能力与Unix主要区别Linux汲取了微内核设计思想(基于模块定制内核)Unix也是单内核系统WindowsNT和Mach是微内核系统21Linux的内核特点Linux简介第二十一页,共71页。22Linux单内核结构用户态标准函数库系统调用(POSIX标准)接口模块内核(进程管理、存储管理、文件管理、设备管理、网络管理)设备驱动计算机硬件核心态单内核模块接口驱动接口Linux简介第二十二页,共71页。23Linux的内核版本Linux内核版本指由Linux开发小组(LinusTorvalds总协调)开发出系统内核的版本号Linux内核采用双树系统一棵是稳定树,主要用于发行另一棵是非稳定树(开发树),用于产品开发和改进Linux内核版本号由3位数字组成r.x.y第1位数字r为主版本号第2位数字x为说明版本类型的次版本号:

偶数表示产品化版本

奇数表示实验版本第3位数字y为修改号,表示错误修补的次数Linux简介第二十三页,共71页。24主流的Linux发行版本Linux简介第二十四页,共71页。25Linux与Windows的区别文件系统Linux需要一个挂载根目录/的ext分区和一个作为虚拟内存的swap分区Linux没有盘符,可通过设备名挂载,挂载信息在/dev/fstab,如mount-tntfs/dev/sda1/mnt/win_cLinux将所有设备都映射成/dev目录下的一个文件用户管理系统管理员是root,使用su命令切换Linux简介第二十五页,共71页。26主要内容Linux简介Linux内核环境Linux编程环境Linux的系统初始化Linux的程序执行机制第二十六页,共71页。27Linux内核核心组成进程调度程序:负责控制进程访问CPU内核管理程序:支持虚拟内存及多进程安全共享主存系统虚拟文件系统:抽象异构硬件设备细节,提供公共文件接口网络接口:提供对多种组网标准和网络硬件的访问进程间通信:为进程之间的通信提供实现机制Linux内核环境第二十七页,共71页。28Linux内核源码的获取下载位置以GNUzip和bzip2形式发布安装位置一般安装在/usr/src/linux,不要将该源码树用于开发在编译自己编写的C库所用的内核版本要链接到该树不要以root身份对内核进行修改,应先建立自己的主目录,仅以root身份安装新内核安装新内核应该保持/usr/src/linux原封不动Linux内核环境第二十八页,共71页。29Linux核心源码结构Linux内核环境第二十九页,共71页。30Linux核心源码的组织arch目录包含与体系结构相关的核心代码,相关.h文件则放在include/asm下支持的每种CPU均有相应子目录,包含boot、kernel、lib和mm等子目录/kernel目录存放大多数内核函数主要文件包括sched.c、time.c、sys.c、itimer.c、fork.c、signal.c、softirq.c、resource.c、dma.c、printk.c等/mm子目录独立于体系结构的主存管理文件包括实现虚拟主存管理的源代码Linux内核环境第三十页,共71页。/fs目录存放VFS和系统支持的各种文件系统源代码每个子目录对应一个特定文件系统/include目录存放重要的内核.h头文件为各种CPU专设一个子目录通用子目录include/linux、include/net/ipc目录存放处理进程间通信所需源代码31Linux核心源码的组织(续)Linux内核环境第三十一页,共71页。/drivers目录存放所有设备驱动程序源代码/net子目录存放网络子系统,如各种网卡和网络规程驱动程序/security目录存放安全子系统代码/sound目录存放语音子系统代码32Linux核心源码的组织(续)Linux内核环境第三十二页,共71页。/init目录存放内核引导和初始化代码许多重要文件,如main.c、version.c就位于该目录下/lib目录存放内核需要的通用工具性内核函数(如对出错信息的处理),它能够在引导时解压内核并装入主存/scripts目录存放编译内核所用脚本和用于系统配置的命令文件/documentation目录存放内核源代码文档33Linux核心源码的组织(续)Linux内核环境第三十三页,共71页。采用模块化的内核配置系统内核模块(LoadableKernelModule)的概念模块实际上是一种目标对象文件,没有链接,不能独立运行但是其代码可以在系统运行时链接到系统中作为内核的一部分运行,或从内核中取下,从而可以动态扩充内核的功能(不需要重新编译内核)这种目标代码通常由一组函数和数据结构组成34Linux内核的配置组成Linux内核环境第三十四页,共71页。使得内核更加紧凑和灵活,可扩展修改模块时,不必全部重新编译整个内核系统如果需要使用新模块,只要编译相应的模块,然后将模块插入即可模块可以不依赖于某个固定的硬件平台模块的目标代码一旦被链接到内核,它的作用域和静态链接的内核目标代码完全等价35内核模块的优点Linux内核环境第三十五页,共71页。并不是所有地方都使用内核模块设备驱动程序文件系统驱动程序系统调用大部分系统调用属于基础内核(Basickernel),也可以以内核模块方式增加新的系统调用或者覆盖现有基于内核模块方式实现的系统调用36内核模块的使用Linux内核环境第三十六页,共71页。程序代码:helloworld.c编译、安装方法root#gcc-chelloworld.croot#insmodhelloworld.oroot#lsmodroot#rmmodhelloworld37模块示例#defineMODULE#include<linux/module.h>intinit_module(void){ printk(“<1>HelloWorld!\n”); return0;}

voidcleanup_module(void){ printk(“<1>Goodbye!\n”);}Linux内核环境第三十七页,共71页。38内核模块与应用程序的差别 C语言程序 模块运行 用户空间 内核空间入口

main() init_module()出口 无 cleanup_module()编译

gcc-cgcc-c-D_KERNEL_-DMODULE连接

gcc insmod运行 直接运行 insmod调试

gdb kdbug,kdb,kgdb等

Linux内核环境第三十八页,共71页。控制需要编译到内核的二进制映象(启动时载入)和在需要时才装入的内核模块配置选项命名形式:CONFIG_FEATURE如CONFIG_SMP表示支持对称多处理器配置项选择模式二选一:yes或no三选一:yes、no或moduleYes选项表示把代码编译进主内核映象,而不作为模块Module意味该配置项被选定,但编译时该功能的实现代码是以模块形式生成驱动程序一般都用三选一形式字符串或整数不控制编译过程,只是指定内核源码可以访问的值,如定义静态变量一般以预处理宏的形式表示39Linux内核编译时的模块选配参数Linux内核环境第三十九页,共71页。内核编译主要工具文件内核编译后,会在/boot目录生产以下文件vmlinuz文件initrd.img文件System.map文件40Linux内核编译的基本架构第四十页,共71页。Makefile定义编译链接规则、位于linux源代码各目录配置文件(config.in或kconfig)提供内核的配置选择和设置配置工具文本命令行工具:makeconfig基于ncurse的图形工具:makemenuconfig基于X11的图形工具:makexconfig基于gtk+的图形工具:makegconfig创建默认配置:makedefconfig配置工具输出文件.config文件:用#include包括到主Makefile中include/linux/autoconf.h:用#include包括到各个.c文件每个.c文件都有<#include/linux/autoconf.h>代码项41Linux内核配置系统组成Linux内核环境第四十一页,共71页。采用GNU编译工具对.config中的源文件列表编译完成内核文件的配置、依赖关系及模块的生成,随后调用Rules.make编译文件Rules.make定义所有Makefile共用的编译规则Makefile支持的make命令makemrproper:检查.o文件及文件依赖关系的正确性makeconfig:配置内核并生成配置文件makedep:根据配置文件创建相应的依赖关系树makeclean:清除旧版本的目标文件makezImage:编译并用gzip压缩成1MB以下的内核未压缩的文件是vmlinuzmakebzImage:编译并用gzip压缩成1MB以上的内核makemodules:编译模块makemodules_install:安装模块depmod–a:生成模块之间的依赖关系42主Makefile功能Linux内核环境第四十二页,共71页。准备阶段下载源码:将源码解压到/usr/src目录下tarxvjflinux-x.y.z.tar.bz2 tarxvzflinux-x.y.z.tar.gz解压位置:linux-x.y.z目录下建立内核编译环境ln–sflinux-x.y.zlinuxcd/usr/includerm-rfasmlinuxscsiln-sf/usr/src/linux/include/asm-i386asmln-sf/usr/src/linux/include/linuxlinuxln-sf/usr/src/linux/include/scsiscsi

43Linux内核的编译、安装过程Linux内核环境第四十三页,共71页。配置内核检查文件依赖关系正确性:makemrproper获取默认.config文件:cp/boot/config-`uname-r`.config生成配置文件:makeconfig创建依赖关系树:makedep清除旧版本目标文件:makeclean生成压缩形式内核文件:makebzImage或makezImage编译后的文件在/usr/src/linux/arch/i386/boot目录下编译、安装内核编译内核:make编译模块:makemodules安装模块:makemodules_install生成模块依赖关系:depmod–a安装内核:makeinstall44Linux内核环境第四十四页,共71页。配置启动文件将内核映像拷贝到合适位置,并按启动要求启动#cp/usr/src/linux/arch/i386/boot/zImage/boot/zImage-x.y.z#cp/usr/src/linux/System.map/boot/System.map-x.y.zln–sf/boot/vmlinuz-x.y.z/boot/vmlinuzln–sf/boot/System.map-x.y.z/boot/system.map系统正常启动时不会读这个符号表;主要是为了内核引导出错时便于调试/sbin/mkinitrd/boot/initrd-x.y.z.imgx.y.z如果是LILO启动方式,编辑/etc/lilo.conf45Linux内核的编译、安装过程(续)Linux内核环境第四十五页,共71页。lilo.conf修改方法 image=/boot/vmlinux-2.4.7-10 //旧内核

label=linux read-only root=/dev/hdal image=/boot/zImage-x.y.z//新内核

label=newkernel read-only root=/dev/hdal注意:必须运行lilo命令将激活新配置。如果是grub,则不需要。46Linux内核的编译、安装过程(续)第四十六页,共71页。47Linux系统的文件系统结构/:文件系统结构的起始点/home:用户主目录/bin:标准指令和工具程序/usr:系统使用文件和指令/usr/bin:用户命令和工具程序/usr/sbin:系统管理员命令/usr/lib:编程语言库/usr/doc:Linux文档/usr/man:在线联机帮助手册/usr/spool:假脱机文件/sbin:管理员开启系统的命令/var:时变文件,例如邮箱文件/dev:设备文件接口/etc:系统配置文件及其它系统文件Linux内核环境第四十七页,共71页。

Linux网络操作系统的安装安装基本需求存储空间>=700MB,一般桌面系统需3GB存储空间 处理器:x86和x86_64 内存:>=64MB CD/DVD-ROM:执行光盘安装 网卡:网络安装需要支持网络启动的网卡第四十八页,共71页。分区与文件系统磁盘与分区文件与文件系统支持Ext2、Ext3、vFat、NTFS、HPFSLinux的分区命名a)IDE硬盘命名为hd,SCSI硬盘命名为sd;b)第一个磁盘命名为a,第二个磁盘命名为b,其余依此类推;第四十九页,共71页。c)磁盘上第一个主分区命名为1,第二个主分区命名为2,其余依此类推;d)磁盘上第一个逻辑分区命名为5,第二个逻辑分区命名为6,其余依此类推;例如:一台计算机中有一块IDE硬盘,分了三个分区,两个主分区,一个逻辑分区,则这三个分区的命名分别为什么?答:hda1、hda2、hda5。第五十页,共71页。/binhome2home1bootvarwwwhtmlindex.htmldefault.cssLinux文件系统示例图磁盘2磁盘1第五十一页,共71页。Linux的安装方式光盘或者USB设备安装硬盘安装网络安装安装过程略。双系统安装方法GRUB引导WindowsWindows引导LinuxGRUB引导多个Linux第五十二页,共71页。2Linux网络参数的配置Linux系统中主要的网络参数有主机名、IP地址、子网掩码、网关、DNS服务器等。网络参数可以通过对相关配置文件的配置来完成设置,也可以通过Linux的图形界面来配置。实际上,Linux中几乎所有的配置都是通过配置文件来完成的,在图形界面下的配置其实也是对相关配置文件的配置。第五十三页,共71页。2.1用命令行配置在命令行状态下,网络参数的配置命令主要有ifconfig、ifup、ifdown等。下面举例说明这些命令在配置网络参数中的常见用法。(1)查看网络运行情况 在命令行直接输入命令:ifconfig该命令在屏幕上显示当前系统中网络参数的配置情况,如下图所示。第五十四页,共71页。第五十五页,共71页。主要显示信息:eth0:网络适配器(网卡)的网络接口,如果系统中有多个网卡,则以eth1、eth2…递增编号。Hwaddr:网卡的物理地址,是计算机中与网络硬件相关的惟一地址。由于地址格式与所用介质的访问控制方法相关,又常称为MAC地址。inet:网卡的IP地址。bcast:网卡的广播地址。mask:显示网卡的子网掩码。lo:回环地址,一般此接口的IP地址都是。第五十六页,共71页。(2)为网络接口eth0配置IP地址假设为网卡eth0配置IP地址:。在命令行输入命令:ifconfigeth0或ifconfigeth0/24注意:各参数必须用空格隔开。(3)激活网络接口eth0在命令行输入命令:ifconfigeth0up或ifupeth0第五十七页,共71页。(4)关闭网络接口eth0在命令行输入命令:ifconfigeth0down或ifdowneth0(5)将网络接口eth0设置为动态获取IP地址命令:ifconfigeth0dynamic(6)为系统添加缺省网关54命令:routeadddefaultgw54第五十八页,共71页。2.2直接修改配置文件 通过命令可以快捷地进行网络参数的配置,但系统重新启动后,所设置的网络参数将丢失。直接修改配置文件可以解决该问题。所有的配置文件都在/etc目录下。以下是几个主要配置文件。第五十九页,共71页。(1)文件/etc/sysconfig/network内容如下:NETWORKING=yesHOSTNAME=localhost.localdomain说明NETWORKING:定义在系统启动时是否启动网络,如果不希望启动则设定为no。HOSTNAME:定义主机的名称。第六十页,共71页。(2)文件/etc/sysconfig/network-scripts/ifcfg-eth0,内容如下:DEVICE=eth0BOOTPROTO=noneONBOOT=yesUSERCTL=noPEERDNS=noTYPE=EthernetIPADDR=NETMASK=GATEWAY=54NETWORK=BROADCAST=55第六十一页,共71页。说明DEVICE:定义本文件所对应的网络接口。BOOTPROTO:定义系统启动时此本网络接口是否使用bootp协议,即是否动态获得IP地址。如果希望动态获得IP地址则设为“BOOTPROTO=dhcp”。ONBOOT:定义系统启动时是否启动此网络接口。USERCTL:定义用户是否可以启动本接口。如果设为“yes”,则所有用户都可以启动或禁用此接口,如果设为“no”则只有root用户才可以启动或者禁用此接口。

PEERDNS:是否设置PEERDNS,一般不需要设置。TYPE:定义此网络接口的格式,这里为以太网格式。(余下的较直观。)第六十二页,共71页。(3)文件/etc/resolv.conf内容如下: search nameserver nameserver52定义DNS服务器注意:对配置文件的修改要借助编辑器第六十三页,共71页。2.3在图形界面下配置网络参数

选择“主菜单→系统设置→网络”选项,弹出“网络配置”对话框进行配置。这里配置的参数实际上是直接对以上介绍的配置文件进行修改。因此,从本质上来说,对文件的配置与图形下的配置相同。注意:无论用哪种方法配置网络参数,都应重新启动网络服务,以使得所做的改动生效。在图形界面中可以选择“主菜单→系统设置→服务器设置→服务”选项,也可以用命令/etc/rc.d/init.d/networkrestart第六十四页,共71页。第六十五页,共71页。第六十六页,共71页。VMware中Linux的网络配

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论