随笔分类 - linux系统编程
摘要:一.ELF文件格式ELF(Executable and Linking Format)是x86 Linux系统下常用的目标文件格式,有三种主要类型:适于连接的可重定位文件,可与其他目标文件一起创建可执行文件和共享目标文件。适于执行的可执行文件,用于提供程序的进程映像,加载的内存执行。共享目标文件,连...
阅读全文
摘要:一.进程控制块PCB-stack_struct进程在操作系统中都有一个结构,用于表示这个进程。这就是进程控制块(PCB),在Linux中具体实现是task_struct数据结构,它主要记录了以下信息:状态信息,例如可执行状态、就绪状态、阻塞状态等。性质,由于unix有很多变种,进行有自己独特的性质...
阅读全文
摘要:一.使用gdb跟踪分析一个系统调用内核函数 1.在test.c文件中添加time函数与采用c语言内嵌汇编的time函数.具体实现请看下图. 2.然后在main函数中添加MenuConfig函数,进行注册。这样当Menuos运行起来时,界面就会多出time与time-asm选项。 3.通过make r...
阅读全文
摘要:一.fork的嵌入式汇编执行#include #include int main(){ pid_t pid; asm volatile( "mov $0,%%ebx\n\t" "mov $0x2,%eax\n\t" "int 0x80\n\t" ...
阅读全文
摘要:一.基于时间片轮转调度代码的解读 代码结构主要由三个文件组成: 1.mypcb.h 2.myinterrupt.c 3.mymain.c1.进程控制块(mypcb.h)/* CPU-specific state of this task */struct Thread{ unsigned...
阅读全文
摘要:今天看《Unix环境高级编程》的fork函数与vfork函数时,看见一个copy-on-write的名词,貌似以前也经常听见别人说过这个,但也一直不明白这究竟是什么东西。所以就好好在网上了解了下,也算明白个大概,先记录下来. 参考http://www.cnblogs.com/biyeymyh...
阅读全文
摘要:守护进程 守护进程是生存期较长的一种进程,它们常常在系统自举时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。UNIX系统由很多守护进程,它们执行日常事务活动. 本章主要介绍守护进程的结构,以及如何编写守护进程程序和守护进程如何报告错误情况.一.守护进程的编程规则 (...
阅读全文
摘要:本章中,主要是介绍控制线程行为方面的内容,同时介绍了在同一进程中的多个线程之间如何保持数据的私有性以及基于进程的系统调用如何与线程进行交互.一.线程属性 我们在创建线程的时候可以通过修改pthread_attr_t结构的值来修改线程的属性,将这些属性与创建的线程联系起来。调用pthread_a...
阅读全文
摘要:本章主要介绍了线程,了解如何使用多线程在单进程环境中来执行多任务。由于多个线程共享其进程空间,所以必须采用同步的机制来保护数据的一致性。一.线程的概念 典型的Unix系统都可以看成只有一个控制线程,一个进程在同一时刻只能做一件事。但有了多线程,我们可以设计成在同一时刻进程能做不止一件事,每个...
阅读全文
摘要:大多数UNIX应用程序都使用I/O库,本章说明了该库所包含的所有函数,以及某些实现细节和效率方面的考虑。同时需要重点关注标准I/O使用了缓冲的技术,但同时也是因为它的出现,产生了很多细节上的问题.流和FILE对象 unix系统调用的函数都是针对文件描述符操作的.而标准I/O库,它们的操作则是围...
阅读全文
摘要:概论:select、poll和epoll三组I/O复用系统调用,这3组系统调用都能同时监听多个文件描述符。它们将等待由timeout参数指定的超时时间,直到一个或者多个文件描述符上有事件发生时返回.返回值是就绪的文件描述符的数量。返回0表示没有事件发生,超时.我们从事件集、最大支持文件描述符的数量、...
阅读全文
摘要:epoll函数epoll函数的使用与select、poll上有很大的差异.epoll使用一组函数来完成任务,而不是单个函数.epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,从而无需每次都要重复传入文件描述符集或者事件集.epoll需要一个额外的文件描述符,来唯一标示内核中的这个事件...
阅读全文
摘要:IO复用:I/O复用使得程序可以同时监听多个文件描述符,这对提高程序的性能至关重要。例如TCP服务器要同时处理监听socket和连接socket,客户端要同时处理用户输入和网络连接.Linux下实现I/O复用的系统调用主要有select、poll和epoll.select函数:#include i...
阅读全文
摘要:tee函数使用功能描述:tee函数在两个管道文件描述符之间复制数据,也是零拷贝操作.它不消耗数据,因此源文件描述符仍然可以用于后续的操作.函数原型:#include ssize_t tee(int fd_in,int fd_out,size_t len,unsigned int flags);函数...
阅读全文
摘要:splice函数: 功能描述:用于在两个文件描述符之间移动数据,也是零拷贝操作。函数定义如下:1 #include 3 ssize_t splice(int fd_in,loff_t* off_t,int fd_out,loff_t* off_out,size_t len,unsigned i...
阅读全文
摘要:1.前言 Linux提供了很多的高级I/O函数,它们在特定的条件下表现出优秀的特性。这里主要讨论的是和网络编程相关的几个。 用于读写数据的函数,包括writev/readv、sendfile。 readv和writev函数#include ssize_t readv(int fd,const str...
阅读全文
浙公网安备 33010602011771号