资源预览内容
第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
第9页 / 共28页
第10页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Linux操作系统培训内容摘要Linux基础 Linux常用操作命令 Linux设备管理Linux文件管理Linux进程调度Linux多线程编程Linux进程间通信 Linux基础操作系统的概念 操作系统是管理计算机系统资源(软件和硬件)资源的系统软件,它为计算机提供方便,有效,安全,可靠的工作环境。主要包括:进程管理,存储器管理,设备管理,文件管理,作业管理等。 操作系统的分类。 操作系统分为实时操作系统和非实时操作系统,又可以分为嵌入式操作系统和非嵌入式操作系统等。linux操作系统即可以作为准实时的操作系统使用,也可作为非实时操作系统使用,并且可以满足服务器操作系统的要求,在桌面操作系统领域也得到较大的发展。所以,linux操作系统已经渗透到嵌入式领域、服务器领域、个人pc领域,成为目前应用领域最广的一种操作系统。Linux基础Linux系统的组成整个linux系统由内核、设备驱动、各种运行时的库、shell及应用程序等组成。 Linux的启动过程。 在硬件上电之后,首先会有一个自举程序运行(在嵌入式领域成为loader,在pc中成为bios),然后自举程序在初始化必要的硬件(例如内存)之后将linux内核读取到内存中,然后跳转到内核的开始位置运行linux内核.linux内核在进行必要的初始化设置工作和挂载根文件系统之后,会启动文件系统中的一个程序作为系统中的第一个进程,这个进程就是大名鼎鼎的init进程,init进程会,然后运行etc目录下的对应的shell脚本文件。Linux基础Linux内核的作用内核是Linux操作系统的核心,它负责系统的文件管理、设备管理、进程管理、存储管理、网络协议,直接决定着系统的性能和稳定性 。 linux的版本号 通常我们所说的linux的版本号,指的就是linux内核的版本号。版本号由三部分组成主版本号、次版本号、末版本号。例如:2.6.19 2为主版本号、6为次版本号、19为末版本号。同时可以通过版本号来确定linux的版本是稳定版本还是开发版本(次版本号奇数为开发版本,偶数为稳定版本)。 Linux常用操作命令命令 功能 ls 列出当前目录下有哪些文件和目录。(ls l 为列出一个目录下的 详细信息) cd 进入一个目录。(cd 为进入上一级目录) pwd 显示当前目录。 rm 删除一个文件或目录。(rm r 为删除一个目录及该目录下的所 有文件) mkdir 创建一个目录。 cp 拷贝一个文件。(cp a b 把a文件拷贝成b文件) du 列出目录占用磁盘空间的大小 rmdir 删除一个目录 find 在指定路径查找文件 Linux常用操作命令命令 功能 grep 在指定文件查找指定字符串 mv 移动文件或目录 chmod 改变文件权限指令 man 命令或函数帮助查询指令 top 查看cpu和内存使用情况的指令 ps 查看当前运行的进程的指令 pstree 查看进程树的指令 Linux设备管理Linux上层应用与实际设备的关联 Linux对于设备的管理是通过设备驱动程序来进行管理,采用设备文件的方式进行关联。每个设备文件都有设备类型,主设备号、次设备号,在驱动程序中会注册这些设备号。这样当上层应用程序操作设备文件时,就会将请求通过Linux操作系统调用传递到驱动程序中,驱动程序控制硬件设备完成相应的操作。 Linux设备文件一般在/dev目录下面。例如如下设备文件: crw-rw- 1 root uucp 4, 64 12月 8 09:57 /dev/ttyS0 是指/dev/ttyS0为字符型设备,主设备号为4,次设备号为64。其实这就是linux系统中的串口1的设备文件。我们打开这个设备文件,然后写入数据,我们写入的数据就会从串口发送出去,我们读入数据,就会读取到从串口收到的数据。 如果我们想控制串口的速率、校验位、码位的长度,我们只需要调用ioctl函数,然后传入相应的数据就可以了。Linux文件管理 Linux系统中使用的文件类型 目前linux采用的文件系统有ext3文件系统,但是在嵌入式linux操作系统中更多的使用的是jffs2,yaffs和nfs网络文件系统。 Jffs2文件系统是专为nor flash设计的文件系统,考虑到了nor flash的许多特性,同时具有压缩性能,一般可以达到2:1的压缩效果,但是在用于大于128Mbytes的flash时,效果不是太好。 Yaffs文件系统是专为nand flash设计的文件系统,考虑到了nand falsh的许多的特性,但是不具有压缩性能,但其加载速度较快,使用于大容量存储的场合。 除去以上文件类型的不同之外,linux提供统一的api操作函数,来实现对文件系统的管理。另外,在linux中,在对一个设备上的文件进行操作时,需要首先挂载这个设备到文件系统中,才能操作这个设备上的文件。 在linux内核启动时,会默认挂载一个文件系统,这个就是根文件系统,此后所有的文件系统都是基于这个文件系统进行挂载,同时也可以卸载,但是根文件系统是不能卸载的。 挂载一个文件系统的命令如下: mount t yaffs /dev/mtdblock0 /mnt 意思是说,把文件类型为yaffs的mtdblock0上的文件系统挂载到/mnt目录下 Linux进程调度Linux 调度算法 Linux 调度算法把CPU 的时间划分为时期(epoch)。在一个单独的时期内,每个进程有一个指定的时间片,时间片持续时间从这个时期的开始计算。一般情况下,不同的进程有不同大小的时间片。时间片的值是在一个时期内,分配给进程的最大CPU时间部分。当一个进程用完它的时间片时,这个进程被抢占,并用另一个可运行进程代替它。当然,在同一时期内,一个进程可以几次被调度程序选中(只要它的时间片还没用完),例如,如果进程挂起自己,等待I/O,那么,它还剩余一些时间片,并可以在同一时期内再度被选中。当所有的可运行进程都用完它们的时间片时,一个时期才结束;在这种情况下,调度程序的算法重新计算所有进程的时间片,然后,一个新的时期开始。Linux进程管理Linux进程的优先级静态优先级(Static priority),这种优先级由用户赋给实 时进程,范围从1 到99,调度程序从不改变它。动态优先级(Dynamic prority),这种优先级只应用于普 通进程。实质上它是基本时间片由此也叫进程的基本优 先级(base priority)与当前时期内的剩余时间片之和。当然,实时进程的静态优先级总是高于普通进程的动态优 先级,只有当TASK_RUNNING 状态没有实时进程时,调度 程序才开始运行普通进程。Linux进程管理Linux进程的创建在Linux中要使用exec函数族。系统调用execve()对当前进程进行 替换,替换者为一个指定的程序,其参数包括文件名(filename)、 参数列表(argv)以及环境变量(envp)。exec函数族当然不止一个 ,但它们大致相同,在Linux中,它们分别是:execl,execlp,execle ,execv,execve和execvp,下面我只以execlp为例,其它函数究竟与 execlp有何区别,请通过manexec命令来了解它们的具体情况。 一个进程一旦调用exec类函数,它本身就“死亡“了,系统把代码段替 换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配 新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统 而言,还是同一个进程,不过已经是另一个程序了。(不过exec类函 数中有的还允许继承环境变量之类的信息。) Linux线程管理使用线程的优点 和进程相比,它是一种非常“节俭”的多任务操作方式 (内存占用,启动时间,切换时间) 和进程相比,线程间的通信更加方便。 提高应用程序响应 使多CPU系统更加有效 改善程序结构,复杂问题简单化Linux线程管理 多线程的例子#include #include #include #include void thread(void)int i;for(i=0;i#include #include #include #include #define INPUT 0#define OUTPUT 1int main()int file_descriptors2;/*定义子进程号 */pid_t pid;char buf256;int returned_count;/*创建无名管道*/pipe(file_descriptors);/*创建子进程*/if(pid = fork() = -1) printf(“Error in forkn“);exit(1);Linux进程间通信无名管道的例子if(pid = 0) /*执行子进程*/printf(“child process.n“);/*子进程向父进程写数据,关闭管道的读端*/close(file_descriptorsINPUT);write(file_descriptorsOUTPUT, “test data“, strlen(“test data“);exit(0); else /*执行父进程*/printf(“parent process.n“);/*父进程从管道读取子进程写的数据,关闭管道的写端*/close(file_descriptorsOUTPUT);returned_count = read(file_descriptorsINPUT, buf, sizeof(buf)-1);if(returned_count#include #include #include void signalCtrlC(int sig)printf(“Got CTRL+C keyn“);exit(0);int main()signal(SIGINT,signalCtrlC);while(1)sleep(1);return 0;Linux进程间通信套接字接口 套接字接口(socket)编程是实现Linux 系统和其他大多数操作系统中进程间通 信的主要方式之一。我们熟知的WWW服 务、FTP服务、TELNET服务以及我们现 在正在做宽带网络信息服务等都是基于 套接口编程来实现的。除了在异地的计 算机进程间以外,套接口同样适用于本 地同一台计算机内部的进程间通信。 关于这部分的编程开发,会在以后的工 作更多的接触到。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号