文章分类 - OS
摘要:gcc -shared -fPIC -o 1.so 1.c -shared 表示产生共享对象 dynamic shared objects -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址
阅读全文
摘要:在进入正题前先来谈谈操作系统内存管理机制的发展历程,了解这些有利于我们更好的理解目前操作系统的内存管理机制。 一 早期的内存分配机制 在 早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算 机同时运行多个程
阅读全文
摘要:在低内存模式中,Dalvik虚拟机假设对象不会马上就使用分配到的内存,因此,它就通过系统接口madvice和MADV_DONTNEED标志告诉内核,刚刚分配出去的内存在近期内不会使用,内核可以该内存对应的物理页回收。当分配出去的内存被使用时,内核就会重新给它映射物理页,这样就可以做按需分配物理内存,
阅读全文
摘要:使用futex可以使程序等待某个地址的值发生变化,当值发生变化后唤醒等待程序#include #include int futex(int *uaddr, int op, int val, const struct timespec *timeout, int *...
阅读全文
摘要:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程); 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存
阅读全文
摘要:epoll的相关系统调用 epoll只有epoll_create,epoll_ctl,epoll_wait 3个系统调用。 1. int epoll_create(int size); #include <sys/epoll.h> int epoll_create(int size); int ep
阅读全文
摘要:#include <signal.h> #include <stdio.h> #include <stdlib.h> void sig_chld(int signo){ printf("get signal:%d\n", signo); } int main(void){ pid_t pid; st
阅读全文
摘要:poll,Linux中的字符设备驱动中有一个函数,Linux 2.5.44版本后被epoll取代。poll()函数:这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,下面是这个函数的声明:#include <poll.h>int poll(struct pollfd fd
阅读全文
摘要:#include<stdio.h> #include<pthread.h> void base() { //pritnf needs #include<stdio.h> printf("main\n"); // pthread_t: unsigned long int pthread_t threa
阅读全文
摘要:SIGHUP 终止进程 终端线路挂断SIGINT 终止进程 中断进程SIGQUIT 建立CORE文件终止进程,并且生成core文件SIGILL 建立CORE文件 非法指令SIGTRAP 建立CORE文件 跟踪自陷SIGBUS 建立CORE文件 总线错误SIGSEGV 建立CORE文件 段非法错误SI
阅读全文
摘要:sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)。 他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该使用这个接口) 给信号signum设置新的信号处理函数act, 同时保留该信号原有的信号处理函数ol
阅读全文
摘要:进程间通信的方法主要有以下几种: (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。 (2)命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关 系进程间的通信。命名管道在...
阅读全文
摘要:什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也
阅读全文
摘要:warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default] 其原因是缺少一个头文件stdlib.h。添加#include <stdlib.h>即可。 -------------
阅读全文
摘要:socketpair创建全双工管道直接的办法当然是pipe两次,创建两组管道,但是有没有更简单的呢?socketpair就可以了,man socketpair:socketpair - create a pair of connected sockets, The two socketsareind...
阅读全文
摘要:GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。$gcc -g -o sample.o sample.c使用 -o 参数指定了编译生成的可执行文件名为 gdb-sample,使用参数 -g 表示将源代码信息编译到可执行文件中。如果不使用参数
阅读全文
摘要:Thread Specific Data 线程存储在多线程程序中,所有线程共享程序中的变量。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的。这就是线
阅读全文
摘要:线程:线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。线程程序作为一种多任务、并发的工作方式,当然有其存在优势:使多CPU系统更加有效:操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上 线程创建
阅读全文
摘要:1 Linux平台实现线程池基本思路和Windows一样,但是由于Linux提供的线程同步原语(POSIX)不如Windows好用,导致有一些特殊的地方需要注意: >在Windows上,线程间通知无外乎就是使用Event,在Linux上,使用POSIX的condition+mutex,也能完成...
阅读全文