完整版)0415-linux系统应用编程-课堂纪要_第1页
完整版)0415-linux系统应用编程-课堂纪要_第2页
完整版)0415-linux系统应用编程-课堂纪要_第3页
完整版)0415-linux系统应用编程-课堂纪要_第4页
完整版)0415-linux系统应用编程-课堂纪要_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、linux进程专题讲座linux内核看linux系统编程进程是操作系统对正在运行的程序的一种抽象。个系统可以运行多个进程,而每个进程好像在独占使用硬件系统调用是一个软中断操作系统在linux内核中完成进程 A B调度linux内核基本功能SCI系统调用直接api函数,通过软中断的方式,让上层应用陷入内核。进程管理进度调度、调度的算法、进程三态。进程是cpu调度资源的最小单位forkVFS虚拟文件管理在linux之下是,一切设备 all文件驱动总线模型2.4 2.6 (真正)支持 pnpext3 ext2 vfat文件系统管理=在驱动总线模型之下做驱动开发。=内存管理进程逻辑地址转换为内存的物理

2、地址1、段式管理 2、页式管理1把逻辑地址=线性地址2线性地址=物理地址linux内核为我们的应用程序创建了单独的进程空间在32bit数据线下,进程地址空间是2 (32);和cpu的寻址能力有关cpu是如何操作内存。=地址总线、数据总线、控制总线16bitcpu寻址范围 内存20bit段式管理:段base+段off,来操作内存逻辑地址:&a逻辑地址页式管理内核把进程单独抽象,抽象出来很多资源调度,这样可以高效的利用系统资源。 =多道程序处理=知道了操作系统管理进程的方式以后。=抛砖:操作系统到什么时候,才开始出现真正的多进程技术。网络协议栈管理为什么把tcpip协议栈放入到linux内核中。需

3、要大量的读写网卡;操作硬件资源,把整个系统的系统给降低了。tcpip 协、议。 。=搭建你自己的知识体系。arc体系管理linux内核不管支持 x86平台32 65 arm mips powerpc摩托罗拉硬件 cpu驱动管理系统编程在操作系统之上利用系统调用、C库进行对系统资源进行访问。如apache、gcc、gdb等应用编程在更高层次的编程接口或者库之上构建应用程序。如an droid程序(an droid sdk )、ipho ne程序( 岗位区别linux内核开发linux内核移植 linux应用开发进程三态进程创建在linux内核中创建。0号进程和1号进程0号进程:linux内核的服

4、务进程。在linux完成自举,自己给自己创建一个进程0号进程也叫空闲进程0号进程会产生 第一个用户空间进程。oooo 1号进程fork系统调用强化/fork进程1/系统的错误吗,给你放到全局变量errno里面。/在程序中,perror可以把errno对应的sting给你打印/如果你在shell/ perror错误吗2fork函数调用特点1次调用两个返回/fork是一个系统调用。在linux内核中完成。/每一个进程在各自的地址空间中返回。要站在linux内核角度去思考fork调用3 fork返回值为什么设计成 pid0是父进程分支、=0是父进程分支/ pare nt:child 1 : n pa

5、re nt 找 child 的 pid 比较难。4 fork理解角度:一次调用两个分支同时运行。这样才是并发的概念5 fork子进程,为什么从fork之后运行,不是再从头到尾的,从main函数,重新来一遍。 /fork创建子进程的机制有关系/写时复制 子进程要copy父进程的 代码段、堆栈段、数据段、PCB进程控制块/PCB控制块是linux内核管理进程的数据结构。task_structII因孩子进程copy 了这么运行场景,所以: child没有必要在运行一遍了。僵尸进程孤儿进程/*孤儿进程pare nt先死,子进程托孤给 1号进程 僵死进程孩子先死,pare nt没来得急收尸 */方式,创

6、建子进程的时候,可以不管子进程,让操作系统linux内核去管/信号:异步处理事件,是一种机制。/言外之意是说:我的程序在顺序的同时,能支持异步的调用信号处理函数。/=fork之后父子进程共享文件/演示父子进程共享文件描述符情况/相当于:两个fd指向同一块内存空间,而已。/因为两个进程共享了文件指针偏移量,所以都能向文件中有序写数据。fork pk vfork1: fork子进程拷贝父进程的数据段Vfork子进程与父进程共享数据段;2: fork父、子进程的执行次序不确定Vfork:子进程先运行,父进程后运行;Vfork和exec函数族在一起execve替换进程映像(加载程序)注意 execve

7、是一个系统调用; 替换意味着:代码段、数据段、堆栈段、进程控制块PCB全部替换。进程终止的5种方式execv族函数用法详解exter n char *e nviron;int execl(c onst char *path, const char *arg, .);int execlp(c onst char *file, const char *arg, .); PATHint execle(c onst char *path, const char *arg,., char * const en vp);int execv(c onst char *path, char *const ar

8、gv);int execvp(c onst char *file, char *const argv);总结:I代表可变参数列表,p代表在path环境变量中搜索file文件。envp代表环境变量/int mai n();int main (i nt argc, char *argv)prin tf(hello.n);prin tf(child :%dn, getpid();char *ars = aa=111, bb=222, cc=33, NULL;/execle(./hello, hello, NULL, ars);/execle(./hello, hello, NULL, ars);ch

9、ar *const argv2 = hello, NULL;execve(./hello, argv2, ars); printf(ececve 没有执行成功 n); sleep(1);return 0;wait 和 waitpidint main (i nt argc, char *argv)pid_t pid;pid = fork();if (pid = -1)ERR_EXIT(fork error);if (pid = 0)sleep (3);prin tf(this is childn);exit(100);/abort(); /非正常退出int ret;prin tf(this is

10、 pare ntn ”);int status;/ret = wait (& status);/ret = waitpid( -1, &status, 0);ret = waitpid(pid, &status, 0);prin tf(ret = %d pid = %dn, ret, pid);if (WIFEXITED(status) /w if exit ed / w exit statusprin tf(child exited normal exit status=%dn, WEXITSTATUS(status);/*elseprin tf(child exited abno rmal

11、n);*/else if (WIFSIGNALED(status) /wif sig naled/如果被信号而终止,可以扑捉信号码/子函数被abort()函数终端,产生6号终端prin tf(child exited abn ormal sig nal number=%dn, WTERMSIG(status);else if (WIFSTOPPED(status)printf(child stoped signal number=%dn, WSTOPSIG(status);return 0;如何避免僵尸进程出现的原因/优雅的退出prin tf(after fork n);int mypid ;

12、while( (mypid = waitpid( -1, NULL, WNOHANG) 0) printf(孩子死掉:dn , mypid);printf(父进程优雅的退出。n);for (i=0; i 0等待其进程I D与p I d相等的子进程。pid = 0 等待其组 I D 等于调用进程的组I D 的任一子进程。换句话说是与调用者进程同在一个组的进程。pid 0) exit(EXIT_SUCCESS);setsid();if (no chdir = 0)chdir(/);if (no close = 0)int i;for (i=0; i3; +i)close(i);open(/dev/

13、nuII, O_RDWR);/把守护进程的标准输出关联到 进程的0号fd文件描述符上/复制0文件描述符给一个空闲的文件描述符dup(0); / 标准输出 也指向 /dev/null /dup2(0, 1);dup(0); / 标准错误输出,也指向/dev/null /dup2(0, 2);return 0;system呑钻喇a-eaa1mi1 un-e-if + pi3 2再爲认还3 1烁帕曜鼻躍 shell -tMIRhISl1 口:f dir -p7f ilie-/ /dev null自动动手写 system命令int my_system(c onst char *comma nd)pid

14、_t pid;int status;if (comma nd = NULL)return 1;if (pid = fork() 0)status = -1;else if (pid = 0)execl(/bi n/sh, sh, -c, comma nd, NULL); exit(127);elsewhile (waitpid(pid, & status, 0) 0)if (errno = EINTR)con ti nue;status = -1; break;return status;信号专题讲座信号的基本概念 信号和中断的区别信号与中断的相似点:(1 )采用了相同的异步通信方式;(2 )当检测出有信号或中断请求时,都暂停正在执行的程序而转去执行相 应的处理程序;(3 )都在处理完毕后返回到原来的断点;(4 )对信号或中断都可进行屏蔽。信号与中断的区别:(1)中断有优先级,而信号没有优先级,所有的信号都是平等的;(2)信号处理程序是在用户态下运行的,而中断处理程序是在核心态下运 行;(3)中断响应是及时的,而信号响应通常都有较大的时间延迟。信号的安装、恢复、默认值_sigha ndler_t old;voidmyha ndle(i nt num)prin tf(recv sig nal id num : %

温馨提示

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

评论

0/150

提交评论