




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内核分析与高级编程详解演示文稿目前一页\总数四十三页\编于二十三点优选内核分析与高级编程目前二页\总数四十三页\编于二十三点内存管理虚拟文件系统进程调度网络接口进程间通信Linux内核的抽象结构网络文件传送VFSSCHEDNET调度\交换进程IPC存取共享内存装入数据和程序虚存交换MM目前三页\总数四十三页\编于二十三点用户应用程序系统库(如标准C库)系统调用接口硬件用户态进程请求与内核的接口模块(动态链接)I/O进程控制(调度\通信内存管理)内核目前四页\总数四十三页\编于二十三点/usr/srclinuxdocumentationscriptsnetmodulesmmlibkernelipcinitincludearchi386…alphakernelmmlib…driversblockcharfsext2fatproc…源代码目录树结构目前五页\总数四十三页\编于二十三点/procdriverfsideirqnetsyssysvipctty有关进程的子目录(十进制数目录)虚拟文件系统/PROC目录结构目前六页\总数四十三页\编于二十三点一个简单的系统监测工具的实现命令行形式:sysinfo[-h][-i][-linterval]
选项:-h——显示命令用法-i——显示系统静态信息,包括:内核版本信息,主机名,内核版本号,操作系统类型,CPU类型和主频,内存信息-l间隔时间——按指定间隔时间刷新显示CPU占用率,包括:用户态、核心态和空闲态占用CPU时间百分比。main()显示帮助信息显示系统静态信息cpuinfo()显示系统动态信息loadinfo()-h-i-l目前七页\总数四十三页\编于二十三点cpuinfo()获取系统日期及时间显示报告系统静态信息的时间和日期依次打开/proc下的相关文件提取系统信息字符串并显示显示系统静态信息/proc/version/proc/sys/kernel/hostname/proc/sys/kernel/osrelease/proc/sys/kernel/ostype/proc/cpuinfo/proc/meminfo目前八页\总数四十三页\编于二十三点loadinfo()执行procinfo命令产生系统信息文件info提取文件info中的cpu使用情况信息格式化输出cpu使用情况信息休眠(由刷新参数指定休眠时间)显示系统动态信息目前九页\总数四十三页\编于二十三点运行态停止态等待态就绪态僵死态进程状态转换关系示意图跟踪结束创建进程、分配资源调度回收资源进程消亡等待事件睡眠时间片耗尽跟踪事件唤醒exit目前十页\总数四十三页\编于二十三点fork()创建新进程后,将并发执行两个进程:intmain(void){pid_tpid;…if((pid=fork())==0)//条件不成立{…}else{父进程执行的分支}…intmain(void){pid_tpid;…if((pid=fork())==0)//条件成立{子进程执行的分支}else{…}…父进程代码子进程代码目前十一页\总数四十三页\编于二十三点子进程生命周期示意图fork()exit()等待态终止信号和状态父进程子进程wait()恢复执行目前十二页\总数四十三页\编于二十三点shell系统调用
内核硬件Shell与内核的层次关系
Shell:接收、解释、执行用户命令。
系统调用:为用户态进程提供内核功能接口。
内核:对硬件进行抽象和管理,提供服务。用户目前十三页\总数四十三页\编于二十三点gettyttyAlogingettylogingettyloginttyBttyX登录登录登录/etc/passwdLinux系统yesyesyes登录过程………目前十四页\总数四十三页\编于二十三点目前十五页\总数四十三页\编于二十三点模拟SHELL的执行流程目前十六页\总数四十三页\编于二十三点例:输入重定向的基本实现方法。…
char*filename=“data.txt”;intfid;…/*打开指定文件“data.txt”,获取该文件描述符*/fid=open(filename,O_RDONLY,o600);
/*用指定文件的描述符替换标准输入设备文件描述符*/if(dup2(fid,STDIN_FILENO)==-1){printf("RedirectStandardInError\n");return-1;}…目前十七页\总数四十三页\编于二十三点例:父子进程通过管道进行通信。intfd[2];…pipe(fd)/*建立管道pipe*/if(fork()==0){…read(fd[0],childbuf,len);/*从管道读父进程写的信息*/…}else{…write(fd[1],msgbuf,len);/*将信息写入管道传给子进程*/…}目前十八页\总数四十三页\编于二十三点例:管道命令“ls|more”的基本实现方法。intfd[2];…pipe(fd)/*建立管道pipe*/
if((child1=fork())==0){if(fd[1]!=STDOUT_FILENO){if(dup2(fd[1],STDOUT_FILENO)==-1){/*输出重定向到管道写端*/printf("RedirectStandardOutError\n");return-1;}}execv(buffer,argv[0]);}…if((child2=fork())==0){if(fd[0]!=STDIN_FILENO){if(dup2(fd[0],STDIN_FILENO)==-1){/*输入重定向到管道读端*/printf("RedirectStandardInError\n");return-1;}}execv(buffer,argv[1]);}…目前十九页\总数四十三页\编于二十三点#!/bin/bashforiin2526272829303132333437383940414344doechoKillingprocessesfromgpp$i/usr/bin/rsh-ngpp$irm-f/home/test/mpida*killalltmpi3ddone例:在运行并行程序的若干节点上删除临时文件和进程。目前二十页\总数四十三页\编于二十三点#!/bin/bashcounter=1whilereadlinedoif[${line:0:1}!='#'];thenecho"$counter:$line"counter=$[counter+1]fidone<$1例:读文本文件并加行号后显示。目前二十一页\总数四十三页\编于二十三点//例3工作目录文件备份程序(shell脚本文件)#!/bin/bashcurr_dir=`pwd`listing=`ls`echo"Copyfor$curr_dir"forfilein$listingdoecho"$file"doneforfilenamein`ls`doecho“Copy$filename…"cp$filenameback/$filenameif[$?-ne0];thenecho"copy$filenamefailed"fidone目前二十二页\总数四十三页\编于二十三点//例4多文件查找与替换操作usage(){echo\"changstrOLDstrNEWstr<filenames>changesthefirstinstanceofOLDstrtoNEWstrineachlineof<filenames>,andreportonthedifferences.Examples:changstrTxTexas./addresses.*changstrasps*.c"exit0}case$1in-h|-help)usage;;esaciftest$#-lt3thenusagefi
目前二十三页\总数四十三页\编于二十三点TMPDIR=/tmpTMPFILE=$TMPDIR/changstr.$$OLDstr=$1NEWstr=$2shift2forFILEin$*dosed-e"s/$OLDstr/$NEWstr/"$FILE>$TMPFILEecho"$FILE:"diff$FILE$TMPFILEecho""mv$TMPFILE$FILEdone目前二十四页\总数四十三页\编于二十三点//例5终端锁屏程序(shell脚本文件)stty-echowhiletest-z"$code"doecho-n"Enterpassword:"readcode</dev/ttydone
trap""23clearecho"**********************************************************"echo"**"echo"**"echo"*TERMINALSECURED!!*"echo"**"echo"**"echo"**************************************************"echo"“目前二十五页\总数四十三页\编于二十三点i=1match=""whiletest"$match"!="$code"dosleep$iecho-n"Enterpassword:"readmatch</dev/ttyi=`expr$i'*'2`doneechosttyecho目前二十六页\总数四十三页\编于二十三点用户程序内核代码模式切换用户空间核心空间用户栈核心栈(进行有关运行级检查)门用户模式核心模式目前二十七页\总数四十三页\编于二十三点逻辑地址线性地址物理地址段机制页机制两级地址转换机制虚拟地址实际地址虚拟系统空间1G进程1虚存用户空间3G……进程2虚存用户空间3G进程n虚存用户空间3G进程虚拟地址空间:4G0XFFFFFFFF0XC00000000XBFFFFFFF0X00000000系统空间用户空间目前二十八页\总数四十三页\编于二十三点逻辑地址转换为线性地址逻辑地址结构段寄存器OFFSET:16位选择子32位偏移地址OFFSET索引TIRPL:153203108字节段描述符GDT全局描述符表┋+线性地址GDTR段内偏移地址段基址TI=0目前二十九页\总数四十三页\编于二十三点线性地址转换为物理地址线性地址结构页目录索引页表索引页内偏移量页目录项┋页表项┋(1024项)(1024项)物理页帧内存页内偏移页帧号CR3页目录表页表31222112110物理地址目前三十页\总数四十三页\编于二十三点页表项
3101211其它控制位禁止缓存位访问位保护位修改位存在位1=只读0=读写页内编移量查表最终得到页帧号+页帧号页内偏移量页帧号1=存在0=不存在物理地址送地址线MMU在页表的支持下完成地址映射和虚实转换线性地址32位10位10位12位目前三十一页\总数四十三页\编于二十三点0111010虚存空间页存在位2013……虚拟空间页……0-4k5-8k9-12k13-16k17-20k21-24k61-64k64k虚存1237页帧0页帧32k物理内存0-4k9-12k13-16k29-32k某时刻的虚实映射5-8k…虚实地址映射0页面123456…15目前三十二页\总数四十三页\编于二十三点入口地址高16位DDPLODXXX00087650段选择码入口地址低16位中断门、陷入门及调用门的基本格式定义31031目前三十三页\总数四十三页\编于二十三点用户进程调用系统调用getuid()执行宏调用_syscall0(int,getuid)即:调用getuid()产生陷入异常(模式切换到进入内核)traps.c内核初始化时trap_init()建立了调用门执行系统调用处理函数system_call()保护现场,由系统调用号(24)查系统调用表(sys_call_table)找到该系统调用的内核处理函数(sys_getuid16())调用sys_getuid16()返回uid,uid→eax,并压入堆栈执行ret_from_sys_call()恢复现场,并从堆栈获得(uid)→eaxeax→__res,uid返回给用户程序系统调用结束将系统调用号(__NR_getuid=(24))送(eax),并执行int$0x80unistd.hentry.Sgetuid()函数中的return__res目前三十四页\总数四十三页\编于二十三点intmain(){intuid;
┆uid=getuid();
┆printf(“┄”);}intgetuid(void){long_
_res;
┆
movl调用号,%eaxint$0x80;movl%eax,__res┆return__res;}ENTRY(system_call)pushl%eaxSAVE_ALL
┆callsys_getuid16(void)
┆RESTORE_ALL
┆
asmlinkagelong\sys_getuid16(void){return用户UID;}用户程序标准C库(系统调用)系统调用处理函数内核处理函数系统调用实现中各程序间的关系示意图目前三十五页\总数四十三页\编于二十三点10读锁SN_READ
写锁SN_WRITE
01信号量数组(初始状态)使用信号量(semaphore)实现读进程\写进程互斥访问共享内存的方法:10(-1)LOCK读锁
写进程获取IPC资源00写共享内存(+1)UNLOCK写锁
释放IPC资源0
101(-1)LOCK写锁
读进程获取IPC资源0
0读共享内存(+1)UNLOCK读锁
释放IPC资源10读进程、写进程互斥访问共享内存的流程:目前三十六页\总数四十三页\编于二十三点写进程进入临界区写数据先写满管道可用空间唤醒等待的读进程管道空间>=所需空间?N退出临界区唤醒读进程写数据量很大?YYY阻塞式写操作?写进程进入等待队列读进程读数据NN写进程写管道的规则和流程目前三十七页\总数四十三页\编于二十三点
#include<stdio.h>#include<stdlib.h>voidmain(){ charstr[10]; pid_tpid; pid=fork(); if(pid>0){ printf("daemonondutynow!\n"); exit(0);}
for(;;) { printf("Iamthedaemon!\n"); sleep(3); system("pwd"); }}目前三十八页\总数四十三页\编于二十三点
UIDLoginMath1Math2EnglishPhysicsGrade510wanglin99989590A501lsx190908080B502zhangyu80907085B-Grades成绩文件:目前三十九页\总数四十三页\编于二十三点//suid程序举例#include<stdio.h>#include<stdlib.h>#include<string.h>#defineN7#defineUID500intmain(){inti,uid;charstr[20],uids[10];FILE*fp;if((fp=fopen("grades","r"))==NULL){printf("Can'topenfilegrades\n");exit(1);}for(i=1;i<=N;i++){fscanf(fp,"%s",str);if(i>1)printf("\t%s",str);}printf("\
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海2025年上海海关学院招聘笔试历年参考题库附带答案详解
- 房屋租赁居间合同格式
- 二零二五停薪留职合同模板
- 二零二五房产中介佣金协议书
- 二零二五版股东为公司垫资股东垫资协议
- 场委托招聘协议
- 2025玉米采购合同模板
- 2025年版企业间借款合同范本
- 2025租赁合同定金协议书
- 2025租赁合同书范本(合同版本)
- 【+初中语文+】《山地回忆》课件+统编版语文七年级下册
- 五年级英语下册 Unit 3 My school calendar Part B第二课时教学实录 人教PEP
- 2025-2030中国建筑装饰行业十四五发展分析及投资前景与战略规划研究报告
- 2025-2030中国奶牛智能项圈标签行业市场发展趋势与前景展望战略分析研究报告
- (一模)2025年广东省高三高考模拟测试 (一) 语文试卷语文试卷(含官方答案)
- 9.3-撒哈拉以南非洲 第2课时课件 七年级地理下册 人教版
- 河北省第八届关注时事胸怀天下知识竞赛题库及答案
- DB32T 5073.2-2025 政务“一朵云”安全管理体系规范 第2部分:密码应用技术要求
- 2023-2024学年广东省深圳市实验学校中学部八年级下学期期中英语试题及答案
- 拆除道牙和生态砖施工方案
- 2025年陕西省延长石油西北橡胶限责任公司招聘154人高频重点模拟试卷提升(共500题附带答案详解)
评论
0/150
提交评论