网站大量收购独家精品文档,联系QQ:2885784924

第13,14次课 第五篇 章 Linux下的C编程 Linux应用程序开发 .ppt

第13,14次课 第五篇 章 Linux下的C编程 Linux应用程序开发 .ppt

  1. 1、本文档共131页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第13,14次课 第五篇 章 Linux下的C编程 Linux应用程序开发 .ppt

第五章 Linux下的C编程;5.1 Linux的体系结构及系统调用;LINUX通过shell和X Window为用户提供的交互界面。 类似地,LINUX通过各种系统调用为应用系统、为进程提供了编程界面。 ;Unix/Linux系统体系结构 ;Date;(3)上下文: 用户级上下文:正文、数据、用户栈以及共享存储区; 寄存器上下文:程序寄存器(IP),即CPU将执行的下条指令地址,处理机状态寄存器(EFLAGS),栈指针,通用寄存器; 系统级上下文:进程表项(proc结构)和U区,在Linux中这两个部分被合成task_struct,区表及页表(mm_struct , vm_area_struct, pgd, pmd, pte等),核心栈等。 进程就是上下文的集合的一个抽象概念。 ;LINUX的系统调用形式与POSIX兼容,也是一套C语言函数名的集合,如fork()、exit()、read()、write()等,共221个(2.4.0版)。 LINUX系统调用的内部实现方式却与DOS的INT 21H相似,也是经过INT 0X80软中断调用进入后,再根据系统调用号分门别类地服务。 ;系统调用的功能和分类 ;系统调用可以看作是一个所有Unix/Linux进程共享的子程序库,但是它是在特权方式下运行,可以存取核心数据结构和它所支持的用户级数据。 系统调用分为两个部分:与文件子系统交互的和进程子系统交互的两个部分。 ;5.2 Linux中的多进程编程 ;5.2.1 多进程程序的特点;(2)寄存器数据的保存: 包括 PC(program counter,指向下一条要执行的指 令的地址), PSW(processor status word,处理机状态字), SP(stack pointer,栈指针), PCBP(pointer of process control block,进程控 制块指针), FP(frame pointer,指向栈中一个函数的local变量的首地 址), AP(augument pointer,指向栈中函数调用的实参位置), ISP( interrupt stack pointer,中断栈指针), 以及其他的通用寄存器等. (3)系统层次的保存: 包括proc,u,虚拟存储空间管理表格,中断处理栈. 以便于该进程再一次得到CPU时间片时能正常运行下去. ;多进程程序的突出特点 ;2.简单有序 这样的程序对程序员来说不亚于管理一班人, 程序员为每个进程设计好相应的功能, 并通过一定的通讯机制将它们有机地结合在一起, 对每个进程的设计是简单的, 只在总控部分小心应付, 就可完成整个程序的施工. 3.互不干扰 这个特点是操作系统的特点, 各个进程是独立的, 不会串位. ;4.事务化 比如在一个数据电话查询系统中, 将程序设计成一个进程只处理一次查询即可, 即完成一个事务. 当电话查询开始时, 产生这样一个进程对付这次查询; 另一个电话进来时, 主控程序又产生一个这样的进程对付, 每个进程完成查询任务后消失. 这样的编程就简单, 只要做一次查询的程序就可以了. ;5.2.2 常用的多进程编程的系统调用;用户应用程序的进程有两种方法进行系统调用, 一种是通过编译程序提供的函数来调用,例如C语言的fseek()函数,虽然fseek是个函数,但是,函数本身在实现时调用了lseek()这个系统调用; 另一种进行系统调用的方法是在应用程序中直接调用系统提供的系统调用程序。 ;1. 进程相关的系统调用;Linux中,进程的创建是通过拷贝已存在进程来实现的。 在Linux内核启动的时候,首先由start_kernel()初始化各个系统数据结构,同时生成了和系统共存亡的后台进程:init。可以参考内核的初始化过程。 init进程通过拷贝自身,产生了若干内核子进程。然后这些进程就可以通过系统调用fork()生成它们的子进程,当然这些子进程的原始数据都是他们的父亲的副本。进程的终止是通过系统调用_exit()实现的。 ;进程的创建 ;fork函数;在调用系统调用fork创建一个进程时,父子进程,具有良好的并发性,但是二者之间的通讯需要通过专门的通讯机制,如:pipe,fifo,System V IPC机制等; fork是一个开销十分大的系统调用,这些开销并不是所有的情况下都是必须的; copy-on-write(写时拷贝)技术:父进程和子进程共享数据和堆栈区域,但是内核将它们都设置为只读权限。当任一进程要修改这些区域时,再生成该块内存的拷贝,通常是虚存的一页。;task_struct;保存子进程的上下文;简单的程序框架;#include stdio.h #include sys/types.h #inclu

您可能关注的文档

文档评论(0)

youngyu0329 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档