了解Linux内核基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Xlib编程
• 倘若用xlib实现,那么用户还需实现
– 将客户和X服务器连接 – 计算窗口尺寸 – 生成窗口 – 为窗口管理程序设置标准特性 – 选择需要接收的事件类型 – 显示窗口 – 事件循环
与服务器的连接
• 服务器的名字格式为: host:server.screen(服务器号,显示器号) • 倘若为空时,表示从DISPLAY环境变量 中取值
• 输入事件(鼠标键盘)
– 服务器在出现某些操作时(如点击),产生事件信息并将其放在 客户事件队列中
• 窗口操作的附加效应(如由遮住变为可见,Expose事件,选择 正文事件) • 客户之间以及可呼吁wm之间的通讯事件,类似于Windows发消 息
事件的响应
• 客户为每个窗口决定对事件进行的选择,事 件的传播,同时还定义了事件处理代码 • 事件循环
X Window的结构
• X系统基于C/S模型 X Client
X Protocol
X Server
• X Client为相应的图形应用程序,如Netscape, Xterm等 • X Protocol为通讯双方使用的协议,其中定义了传 输的包格式以及打包和拆包的方法,用一个函数 库来支持 • X Server完成图形设备的驱动并提供各种图形服务
• Client Application是用户编写的图形界面(窗口)应用程 序,可以直接基于X Lib,也可在Tool Kit上。如Xterm, xclock等 • Window Manager(wm)也是一个应用程序,它用来决定窗口 的布局,产生桌面,移动窗口,修改尺寸,启动新应用等 • Tool Kit是一个工具库,它将菜单,按钮等一般控件进行封 装后定义为Widgets目标基,供应用程序开发者直接调用 • X lib是用C语言编写的基本库函数。用于实现与服务器的连 接,创建窗口等基本功能,类似于Windows下的API • X Server是一个通常意义上的Server,用来侦听client发来的 请求,对其进行解释执行,返回特定信息 • X Server作用在设备驱动程序之上,这些驱动程序用来驱动 与图形相关的设备,可驱动多种类型的显卡,鼠标及键盘外 设
Linux下的X Window系统
• 需要的支持(可一并安装,也可分开装)
• 客户机(X Client) • 服务器(X Server) • 设备驱动 • Xlib
• X 服务器
• Linux XFree86(免费) Accelerated X Server和Metrolink X Server(商业版) • 硬件的配置(设置监视器,显卡等参数) • 配置XFree86的工具:xf86config,Xconfigurator,XF86setup等 • 配置完成后,将其保存到文件/etc/x11/xf86config下
• Xt起框架作用,并提供大量的用户界面元素 • Widget提供了一组图形控件(绘制及处理) • 常见的Widget用Motif,Openlook,Xae等,其中Motif是事实上的 工业标准
开发结构
Client Application Widget Xt X lib
Motif程序设计
• 整体结构
X Window编程
• 基于C/S模型,所以其上的开发有
• Client开发:Client Application,Xlib,Widget等 • Server开发:Server开发,新型设备驱动
• 对于Client Application的开发,可立足于Xlib,也 可在更高层次如Xt Intrinsics以及Widget上开发。
Motif例程(3)
• 处理函数
void PushCB(w,client_data,call_data); Widget w;XtPointer client_data;XtPointer call_data; { ……}
• 编译执行
• gcc …… -lXm –lXt –lX11 -L /usr/x11/lib • 在X Window下敲入编译好的程序
• 存在的原因
• 为使系统安全可靠,CPU的运行级别常分为不同的等级。不同 的等级其权限(对内存的访问以及执行一些特殊指令)不同 • 通常只区分核心态和用户态两个级别。核心态执行的程序可以 访问全部内存,用户态执行的程序只可以访问部分内存。 • 将用户态程序可以访问的那部分内存称为用户态内存,另一部 分内存称为核心态内存。用户程序放在用户态内存中,运行在 用户态。操作系统放在核心态内存,执行在核心态。 • 限制了用户对系统的影响,使得OS安全可靠。但同时,用户 的程序不可以直接访问操作系统,需要进行状态切换。
第十章 第一部分 Linux用户接口之谜
进一步深入认识Linux
哪些部分是用户接口
用 户
用 户 接 口
Shell字 符界面
XWindow 图形界面 系统调用 系统内核
应用 程序
用 户 态
核 心 态
系统调用的概念
• 系统调用是内核向上层应用提供的接口
• 用户键入的命令,编写的程序,以及图形界面都是通过这一接 口来访问内核以及硬件设备的。 • 系统调用接口实际上就是一个函数集{fork(),open(),exec()…}。 他们和普通的函数调用在用户眼里没有区别
– X 环境初始化 – – – – – 创建所用组件 为组件加入回调函数,对用户的输入进行响应 实现组件,将其显示到屏幕上 进入事件循环 接受用户输入事件,并将其分发到相应的会调函数中
Motif例程(1)
• 包含头文件
#include <Xm/Xm.h> #include <Xm/XmPusb.h> #include <X11X.h> #include <X11/Intrinsic.h> Main(argc,argv) {XtAppContext app; Widget toplevel; Widget button; void pushCB() XmString btnText;
char *display_name=NULL; Display *display; display=XOpenDisplay(display_name); Int screen_num; screen_num=DefaultScreen(display);
获得窗口信息并创建窗口
• • • • • unsigned int display_width,display_height; display_width=DisplayWidth(display,screen_num); display_height=DisplayHeight(display,screen_num); X=0;y=0; Win=XCreateSimpleWindow(display,RootWindow(disp lay,screen_num),x,y,display_width/3,display_height/3,b order_width,BlackPixel(display,screen_num),WhitePixe l(display,screen_num))
系统调用的控制
• 修改
• 改写内核功能函数 • 改写函数入口映射
• 添加
• 设计一个名字(调用函数)mysyscall • 编写其展开头文件#define NR_mysyscall 198 #define mysyscall { push NR_mysyscall; int 80;} • 80号中断处理程序处新加一段映射,取出其参数,跳入相应的 内核函数sys_mysyscall() • 编写sys_mysyscall(){printk(“hello”);}
• 声明对象
Motif例程(2)
• 创建控件并显示控件
Toplevel=XtVaAppInitialize(&app,”Hello”,NULL,0,& argc,argv,NULL,NULL); btnText=XmStringCreateSimple(“Hello World”); button=XtVaCreateManaged(Widget(“button”,XmP ushButtonWidgetClass,toplevel,XmNlabelString,btn Text,XnNWidth,50,XmHeight,25,NULL); XtAddCallBack(button,XmVactiveCallback,PushCB, NULL); XtRealizeWidget(toplevel); XtAppMainLoop(app);}
实现的具体过程
用调用系统调用函数(如open) 用 户 核 心 某些头文件或库函数将open展开为int命令(如int 80) int命令中断内核,进入中断处理程序(80号中断处理程序)
中断处理程序根据传递过来的参数调用相应的核心功能 中断返回(如ret)
系统调用机制涉及的程序部分
• 将调用函数展开成int命令
X Window
• 系统调用完成核心功能的导出,用户可以用它完 成所有的工作,但要编写复杂的程序 • 为方便用户,在系统调用的基础上,编写了其它 一些软件来实现更加友好的用户界面
• 可敲入命令:Shell再加上相关命令集 • 可图形化操作:X Window
• X Window是一个应用软件,向用户提供友好的图 形界面,可用来编辑文档,浏览网页等。X Window是一个应用程序,和Windows存在本质区 别
• 用头文件或库函数(如unstd.h)。其中也包含参数是如何传递。 如open对应定义有一个内核功能编号NR_sysopen
• 中断机制的建立
• 填写80号中断处理的入口
• 中断处理程序的编写
• 从参数中获得内核功能号及其参数 • 依据功能号执行相应的内核函数(sys_open)
• 内核功能函数的编写(sys_open的编写) • 中断返回。处理返回值,内核向用户态内存写数 据
Linux下的X Client
• 窗口管理器
• 保证了界面风格的灵活性。管理屏幕上各应用程序 (窗口)间的关系及外观 • 常见的wm有
– fvwm95(类似Windows 95) – Mwm(OSF)(Motif界面风格)
• 应用软件
• xfm(x file manager) • Ghost View • xedit xview X paint等
X 工作原理
• 基于事件驱动:关键在于Xlib和X Server之间事件 (信息)的相互合作(X协议)
• 请求:Xlib X Server如绘制一条线 • 回答:X Server Xlib产生相应的应答 • 事件:X Server Xlib 设备动作及前一个请求的副作用(如点击)
• 事件分类(事件以队列的方式出现在客户端)
系统调用的实现
• 状态切换
• 唯一的方法是中断
– CPU自陷(内部中断),如溢出,缺页 – 硬件中断(外部中断),如鼠标,键盘 – 软件中断(可编程),如Intel提供的int指令
• 显然,前两种中断是不可控的,不能用于系统调用
源自文库
• 系统调用的本质
• 定义:通过int命令(取决于不同的硬件)将内核的 功能以函数形式向用户导出的过程
客户取出事件(若无事件则等待) 如果是退出事件,则退出; 决定选择事件的窗口; 应用传播路径; 进行处理; 继续循环。
X Window和Windows
• 基本工作原理类似(基于消息驱动,事件驱动, 含有面向对象的含义) • X Window可运行在网络上(网络透明), Windows只运行于单机 • X Window是应用程序,Windows是操作系统核心 的一部分 • X Window灵活,但效率较低,Windows效率高, 不十分灵活 • X Window可移植性好,有良好的开放性
X Window的详细结构
Client Application X lib Client (Window Manager) X lib Client Tool Kit X lib
网络通讯 (不同机器上) 内部通讯(IPC) (同一机器上)
X Server Device Driver
显示器
X Window中各部分的含义