Date: Thu, 11 May 2000 20:10:54 -0700 (PDT) From: FengYue <fengyue@bluerose.windmoon.nu> To: hackers@FreeBSD.ORG Subject: Why this works? Message-ID: <Pine.BSF.4.10.10005111955220.29094-100000@bluerose.windmoon.nu> In-Reply-To: <20000511210915.A38341@Hamilton-ppp44812.sympatico.ca>
next in thread | previous in thread | raw e-mail | index | archive | help
Hello, I've 3 small programs. First one writes 4K of data contains 'A's into a file /tmp/pagetest and then lseek() to the begin of the file. Second one writes 4K of 'Z' into the same file /tmp/pagetest and then lseek() to the begin of the file. They both do that in a tight loop. Now, the third program reads 4K of data from /tmp/pagetest and exit if the 4K data does not contain all 'A's nor 'Z's. 3 programs run concurrently on the same machine (3.4). No lock in the code whatsoever, and all 3 programs use pure write() and read(). I thought the third program would exit pretty quickly since the data in the file may contain mixed of 'A's and 'Z's, but it has been running for hours and nothing happened. Could someone kindly explain this? I was told that this is because the pagesize is 4096 in the kernel, so that read()/write() 4K of data will not get context switched until the call is compeleted. Is that right? I can attach the code if it's necessary. Thanks FengYue To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.10.10005111955220.29094-100000>