- 1、本文档共30页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux常用网络服务的使用与配置.ppt
* * * * 与普通函数类似,系统调用通常也需要输入/输出参数,这些参数可能是实际的值(例如数值),也可能是函数的地址及用户态进程地址空间的变量。因为system_call( )函数是Linux中所有系统调用唯一的人口点,因此每个系统调用至少有一个参数,即通过eax寄存器传递来的系统调用号。例如,如果一个应用程序调用fork( )封装例程,在执行int $0x80汇编指令之前就把eax寄存器置为5。因为这个寄存器的设置是由libc中的封装例程进行的,因此程序员通常并不需要关心系统调用号。 fork( )系统调用并不需要其他的参数。不过,很多系统调用确实需要由应用程序明确地传递另外的参数。例如,mmap( )系统调用可能需要多达6个参数(除了系统调用号)。 普通函数的参数传递是通过把参数值写进活动的程序栈(或者用户态栈或者内核态栈)。但是系统调用的参数通常是传递给系统调用处理程序在CPU中的寄存器,然后再拷贝到内核态堆栈。 为什么内核不直接把参数从用户态的栈拷贝到内核态的栈呢?首先,同时操作两个栈是比较复杂的;此外,寄存器的使用使得系统调用处理程序的结构与其他异常处理程序的结构类似。 然而,为了用寄存器传递参数,必须满足两个条件: (1)? 每个参数的长度不能超过寄存器的长度,即32位3。 (2)? 参数的个数不能超过6个(包括eax中传递的系统调用号),因为Intel Pentium寄存器的数量是有限的。 第一个条件总能成立,因为根据POSIX标准,不能存放在32位寄存器中的长参数必须通过指定它们的地址来传递。 对于第二个条件,确实存在多于6个参数的系统调用:在这样的情况下,用一个单独的寄存器指向进程地址空间中这些参数值所在的一个内存区即可。当然,编程者不用关心这个工作区。与任何C调用一样,当调用libc封装例程时,参数被自动地保存在栈中。封装例程将找到合适的方式把参数传递给内核。 存放系统调用参数所用的6个寄存器以递增的顺序为:eax (存放系统调用号)、 ebx、ecx、edx、esi及edi。正如前面看到的那样,system_call( )使用SAVE_ALL宏把这些寄存器的值保存在内核态堆栈中。因此,当系统调用服务例程转到内核态堆栈时,就会找到system_call( )的返回地址、紧接着是存放在eax中的参数(即系统调用的第一个参数)、存放在ecx中的参数等等。这种栈结构与普通函数调用的栈结构完全相同,因此,服务例程可以很容易地使用一般C语言构造的参数。 让我们来看一个例子。处理write( )系统调用的sys_write( )服务例程的声明如下: int sys_write (unsigned int fd, const char * buf, unsigned int count) ? C编译器产生一个汇编语言函数,该函数可以在栈顶找到fd、buf和count参数,因为这些参数就位于返回地址的下面。 在少数情况下,系统调用不使用任何参数,但是相应的服务例程也需要知道在发出系统调用之前CPU寄存器的内容。例如, 系统调用fork( )没有参数,但其服务例程do_fork( )需要知道有关寄存器的值,以便在子进程中使用它们。在这种情况下,一个类型为pt_regs的单独参数允许服务例程访问由SAVE_ALL宏保存在内核态堆栈中的值: ? int sys_fork (struct pt_regs regs) ? 服务例程的返回值必须写到eax寄存器中,这是在执行return n指令时由C编译程序自动完成的。 3 我们照样指的是IA32体系结构。这部分的讨论不部适合Compaq Alpha 64位处理器。 * * Linux常用网络服务的使用与配置 * 网络服务管理工具 /etc/services文件列出了Linux系统支持的所有服务的名称 介绍三种不同的管理工具 常用应用服务器配置 * 图形界面的管理工具 X Window下执行【主菜单/系统配置/服务器设置/服务】 * 文本界面的管理工具 在终端中 输入命令 ntsysv * 命令行界面的管理工具 命令chkconfig用于检查和设置系统的各种服务 添加指定的新服务:chkconfig --add 服务名 删除指定服务:chkconfig --del 服务名 显示所有或指定服务,以及他们在每个运行级别是否启动等: chkconfig --list 或chkconfig --list [服务名] 检查指定服务的状态: chkconfig 服务名 改变服务的运行级别及启动信息: chkconfig [--level 运行级] 服务名 [状态] * 命令行界面的管理
文档评论(0)