Articles of Linux操作系统

当schedule()返回?

在阻塞IO的情况下,比如说驱动程序读取,我们在某些情况下调用wait_event_interruptible()。 条件满足时,阅读将完成。 我看着wait_event_interruptible()函数,它检查条件并调用schedule()。 schedule()将查找下一个可运行的进程,并执行上下文切换,其他进程将运行。 这是否意味着,当进程被唤醒时,当前进程的下一条指令将在schedule()函数中? 如果是的话,如果多进程自动调用进度,那么所有进程在被唤醒后都会有下一条指令被执行一次会在schedule()内? 在ret_from_interrupt的情况下,schedule()被调用。 什么时候会回来? 因为iret在那之后被执行。

sed两种模式search,并在第二种模式发生后追加线

以下sed问题在过去的两天里给了我很多的麻烦。 我有以下文件(iptables) : someline someline *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] someline 我想使用sedsearch模式*filter ,如果匹配,然后search第二个模式[0:0] ,然后在第二个模式的最后一次出现后添加一行。 这(理想情况下)会导致: someline someline *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] TESTLINEADDEDBYSED someline 这里的论坛给了我一个好的开始,但是我不能解决这个具体问题。 我到目前为止有以下解决scheme,但它添加第一个出现的第二个模式[0:0] : sed -n '/\*filter/{:a;N;/^\n/s/^\n//;/\[0:0\]/{!ba;p;s/.*/TESTLINEADDEDBYSED/;};ba}; p' file 我是在第二个分支我会消耗(读:skip?)第一次出现[0:0]的假设.* 我在这里误解了什么?

pipe理超过所有可用RAM的数据结构

从我以前的问题: 存储大量索引的数据结构,每个都指向一个集合 ,我得到了一个合适的数据结构的倒数索引实现的答案。 不过,我们很快就可能在我们的Linux服务器上达到128GB的内存限制,所以我想为它做好准备,以防万一,我们再次耗尽内存。 目前,我们获得的转换指数总数高达39亿,大约需要50GB的内存。 需要注意的是,虽然有些人可能会build议数据库系统等, 这是为了实验研究,我们想pipe理自己的数据,而且我们不会使用任何types的数据库系统。 我也被指出什么时候应该使用mmap进行文件访问? 虽然这看起来很有希望,但是我search了一下,看到我需要先为mmap分配一个固定的空间,然后开始放入数据。但是,我的第一个问题(1)是因为我们有更大的数据,我知道我的反转指数会更大,但是我不知道确切的数字,直到我build立它。 (有些数据需要先处理,然后再把这些数据放到倒排索引中),我可以为它分配很多的内存,但是,嘿,我们得到了50GB的内存,现在只有当前的倒排索引。 这导致了第二个问题(2),我们的服务器有很多人在使用,而且有50GB或更多的空间,我们的数据将在硬盘上四处碎片化。 或者,如果我使用文件I / O来pipe理这个并且像分层目录一样制作一个B-Tree? 事情可能会变得丑陋… 所以这一次,我想问一些build议,就像我上面的问题一样,但是这次我需要在RAM和硬盘之间交换一些数据,我们的128 GB内存可能不支持这个。

系统+ usleep +multithreading= SEGV / SIGILL

我正在使用内核版本2.6.10和“普通”C. 我已经缩小到两个线程为什么我们的程序崩溃。 定时器线程 void TimerThread(void) { while (exec) { usleep(10000); RSLTCD r = SUCCESS; // r = LockMutex(Mtx); do { // some process } while(1); // r = UnlockMutex(Mtx); } return ; // Not Reached } 系统线程 void SystemThread(void) { CreateThread(TimerThread, OALTHRD_DEFAULT_STACKSIZE, THREADPRI_NORMAL, 0, 0); for(;;){ system("echo this is a SYSTEM CALL 1"); system("echo this […]

我们是否需要禁用交换riak?

我刚刚在riak文档中发现交换使得服务器无响应,所以它必须被禁用。同样,如果Riak节点使用太多的RAM,则允许它被内核杀死。 如果交换完全禁用,Riak将退出。 我很困惑,如果我们不得不禁用交换或不?

Bash:使用'at'来编程当前脚本的下一个执行

我想执行一个脚本,并安排下一次执行。 样本将是: #!/bin/bash TMP=/tmp/text.txt SCRIPT=$(readlink -f $0) date >>$TMP at -f $SCRIPT now + 1 minutes >>$TMP 2>&1 echo -e "\n" >>$TMP 样例执行如下: 首先执行OK。 计划到下一分钟 第二次执行写入确定但不计划 结果输出将是: tue mar 5 14:34:01 CET 2013 job 15 at 2013-03-05 14:35 tue mar 5 14:35:00 CET 2013 job 16 at 2013-03-05 14:36 [now at 2013-03-05 14:38] atq输出什么都没有,我没有看到任何/ var […]

同时访问文件。 奇怪的locking行为

我无法理解我的程序行为。 int MyOpenWrite(char *name,int flags) { int fd; unsigned long tm; unsigned long t; tm=time(0)+5; //5 seconds for (;;) { fd = open(name,flags,S_IREAD|S_IWRITE|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); if (fd>0) break; if (time(0)>=tm) return -1; } //1111111111111111111 LockFile(fd); DelayInSeconds(60); //2222222222222222222222 return fd; } int LockFile(int fd) //return 0 – OK; -1 – Error { struct flock lock; lock.l_type = F_WRLCK; […]

当shell = True时检测Popen()错误

我想在该用户的$SHELL执行任意用户提供的命令。 这个命令可能是短命的(比如ls )或者是长命的(比如firefox ),也可能是一个命令,一个pipe道或者任何其他shell支持的构造。 执行方法必须代表shell成功或失败,不论是何时或是否终止,都不能阻塞。 该命令可能永远不会终止,直到执行的方法返回并继续我的程序。 Popen()与shell=True不会阻止,但也不表示失败。 subprocess辅助函数会阻塞,在这里没有用。 Popen.poll() (在这个问题中build议)返回None直到命令终止,并且在失败时不会立即返回非None (它必须重复调用,直到shell终止)。 作为期望的行为的一个例子 prog1 = shell_run('blocking_prog', stdin=PIPE, stdout=PIPE) prog2 = shell_run('nonsense_prog', stdin=PIPE, stdout=PIPE) 第一行应该给prog1分配一个Popen对象,第二行应该引发一个OSError或类似的东西。 我是否认为在这些条件下不可能检测到Popen()错误是正确的?

为什么Apache Cordova不支持Linux桌面?

我最近看到这个项目开发多平台应用程序,我看到所有主要的移动平台,以及MAC OS X和Windows Desktop,但为什么没有Linux Desktop支持?

ASLR受到Linux上熵的影响?

在random.c中的内核源代码中random.c , get_random_int是“与urandom类似,但是具有最小熵池耗尽的目标”。 但是, get_random_int在哪里(以及如何)与熵池交互? 现在, urandom实际上调用了extract_entropy_user ,但是我在get_random_int中看不到任何类似的东西。 似乎get_random_int使用自己的熵源(与键盘,鼠标和磁盘活动无关): hash[0] += current->pid + jiffies + get_cycles(); 并且不关心(也不更新)一般系统可用的熵的状态? get_random_int如何耗尽熵池? 哪里得到更新? 我知道我错过了某些东西,或者读了错误的源代码,因为当我执行一个程序时,我可以看到它是如何通过在entropy_avail上执行cat来消耗熵池的。 我已经浏览了http://xorl.wordpress.com/2011/01/16/linux-kernel-aslr-implementation/,但似乎没有提到这是如何工作的。