摘要:
unp27章节中的27.12中,我们的子线程是通过操作共享任务缓冲区,得到task的,也就是通过线程间共享的clifd[]数组,这个数组其实就是我们的任务数组,得到其中的connfd资源。我们对这个任务数组的操作,需要互斥量+条件变量达到同步的目的。。每个线程是无规律的从clifd得到任务,然后执行... 阅读全文
摘要:
僵尸进程:本质是进程描述符task_struct;维护子进程的状态,包括子进程ID,终止状态以及进程的资源利用情况(cpu时间,内存)int wait(int*stat_loc):成功之后返回终止子进程的pid,失败返回-1,并设置errno1、wait调用堵塞进程直到有任一一个子进程终止,则立刻返... 阅读全文
摘要:
子进程不产生僵尸进程的方法:方法一:signal(SIGCHLD, SIG_IGN);父进程不必等待子进程结束,子进程由init进程负责回收因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源。如果将此信号的处理方式设为忽略,可让内核把僵尸子进程转交给init进程去处... 阅读全文
摘要:
父子进程共享文件描述符:此说法,其实是父子进程共享文件表项(父进程和子进程共享同一个filetableentry)由于子进程是父进程的拷贝,子进程会拷贝父进程的进程描述符中的文件描述符表,可以说继承父进程的文件描述字(files_struct中的structfile*fd_array[NR_OPEN... 阅读全文
摘要:
对于server端:以端口为通配符方式bind:对于服务器,bind(0,ip),则调用bind函数之后,就可以调用getsockname获取服务器得到的本地端口号以ip地址为通配地址bind,只有accept返回之后,调用getsockname(connfd,......)才会返回服务器得到的本地... 阅读全文
摘要:
apue中:其中进程表项内部的数组又称为 进程打开文件表 另外一个角度:从linux内核角度开:task_struct是进程描述符对应上面的进程表项,在task_struct描述符中有struct file_struct*类型的变量file,指向struct file_struct结构。1.file... 阅读全文
摘要:
deque supports const time insert and erase operations at the beginning or the end, insert or erase in the middle take linear time.vector在中间位置插入和删除操作时间... 阅读全文
摘要:
所谓的适配器就是底层利用仿函数,然后修改仿函数的接口,达到自己的目的;例如:templateclass binder1st的适配器,其本质是一个类,它的模板参数operation其实是仿函数类(仿函数其实是struct类),内部函数调用operator()(const typename Operat... 阅读全文
摘要:
中断和异常:中断只代表异步中断,异常代表同步中断,这样系统调用是异常处理,不是中断处理。这里异常处理是可以休眠block的,因为异常处理所需的数据是存储在异常栈中,而每个进程都有一个异常栈,所以异常处理和进程是相关联的,这样异常处理可以block,被调度出去???同步的中断(比如系统调用、缺页异常)... 阅读全文
摘要:
umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读(4)+写(2)+执行(1),同组的和其它用户有读写权限)基本都是说目录权限就用777-umask,文件权限就用666-uma... 阅读全文