{"id":1564,"date":"2012-03-24T15:39:43","date_gmt":"2012-03-24T06:39:43","guid":{"rendered":"http:\/\/peta.okechan.net\/blog\/?p=1564"},"modified":"2012-03-24T15:39:43","modified_gmt":"2012-03-24T06:39:43","slug":"xv6-49-chapter-4-scheduling-code-pipes","status":"publish","type":"post","link":"https:\/\/peta.okechan.net\/blog\/archives\/1564","title":{"rendered":"[xv6 #49] Chapter 4 &#8211; Scheduling &#8211; Code: Pipes"},"content":{"rendered":"<p>\u30c6\u30ad\u30b9\u30c8\u306e59\u301c60\u30da\u30fc\u30b8<\/p>\n<h3>\u672c\u6587<\/h3>\n<p>\u3053\u306e\u7ae0\u306e\u6700\u521d\u306e\u307b\u3046\u3067\u6271\u3063\u305f\u30b7\u30f3\u30d7\u30eb\u306a\u30ad\u30e5\u30fc\u306f\u3001\u307e\u308b\u3067\u304a\u3082\u3061\u3083\u3067\u3042\u308b\u3002<br \/>\n\u3057\u304b\u3057\u3001xv6\u306f\u8aad\u307f\u8fbc\u307f\u3068\u66f8\u304d\u8fbc\u307f\u3092\u540c\u671f\u5316\u3059\u308b\u305f\u3081\u306bsleep\u3068wakeup\u3092\u4f7f\u3046\u3088\u3046\u306a\u672c\u7269\u306e\u30ad\u30e5\u30fc\u30922\u3064\u542b\u3080\u3002<br \/>\n\u3072\u3068\u3064\u306fIDE\u30c9\u30e9\u30a4\u30d0\u3067\u4f7f\u308f\u308c\u308b\u3002<br \/>\n\u30d7\u30ed\u30bb\u30b9\u306f\u30c7\u30a3\u30b9\u30af\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30ad\u30e5\u30fc\u3078\u8ffd\u52a0\u3057\u3001\u305d\u3057\u3066sleep\u3092\u547c\u3076\u3002<br \/>\n\u5272\u308a\u8fbc\u307f\u30cf\u30f3\u30c9\u30e9\u306fwakeup\u3092\u4f7f\u3063\u3066\u3001\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u306b\u305d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u5b8c\u4e86\u3057\u305f\u3053\u3068\u3092\u901a\u77e5\u3059\u308b\u3002<\/p>\n<p>\u3088\u308a\u8907\u96d1\u306a\u5b9f\u4f8b\u3068\u3057\u3066\u306f\u3001\u30d1\u30a4\u30d7\u306e\u5b9f\u88c5\u3067\u3042\u308b\u3002<br \/>\n\u6211\u3005\u306f\u7b2c0\u7ae0\u3067\u30d1\u30a4\u30d7\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u898b\u305f\u3002<br \/>\n\u30d1\u30a4\u30d7\u306e\u4e00\u7aef\u306b\u66f8\u304d\u3053\u307e\u308c\u305f\u30c7\u30fc\u30bf\u306f\u3001\u30ab\u30fc\u30cd\u30eb\u306e\u30d0\u30c3\u30d5\u30a1\u306b\u30b3\u30d4\u30fc\u3055\u308c\u3001\u305d\u3057\u3066\u4ed6\u306e\u4e00\u7aef\u304b\u3089\u8aad\u307f\u8fbc\u3081\u308b\u3088\u3046\u306b\u306a\u308b\u3002<br \/>\n\u5148\u306e\u7ae0\u3067\u306f\u3001\u30d1\u30a4\u30d7\u3092\u53d6\u308a\u5dfb\u304f\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u30b5\u30dd\u30fc\u30c8\u306b\u3064\u3044\u3066\u8aac\u660e\u3059\u308b\u3002<br \/>\n\u3057\u304b\u3057\u4eca\u306f\u3001pipewrite\u3068piperead\u306e\u5b9f\u88c5\u306b\u3064\u3044\u3066\u898b\u3066\u3044\u3053\u3046\u3002<\/p>\n<p>\u30d1\u30a4\u30d7\u306f\u3059\u3079\u3066\u3001pipe\u69cb\u9020\u4f53\u3068\u3057\u3066\u8868\u73fe\u3055\u308c\u308b\u3002<br \/>\n\u305d\u306e\u69cb\u9020\u4f53\u306f\u3001lock\u3068\u30d0\u30c3\u30d5\u30a1\u306e\u305f\u3081\u306edata\u3068\u3044\u3046\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u542b\u3080\u3002<br \/>\nnread\u3068nwrite\u3068\u3044\u3046\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u3001\u305d\u308c\u305e\u308c\u305d\u306e\u30d0\u30c3\u30d5\u30a1\u304b\u3089\u4f55\u30d0\u30a4\u30c8\u8aad\u307f\u8fbc\u3093\u3060\u304b\u3001\u4f55\u30d0\u30a4\u30c8\u66f8\u304d\u8fbc\u3093\u3060\u304b\u3092\u8868\u3059\u3002<br \/>\n\u30d0\u30c3\u30d5\u30a1\u306f\u5faa\u74b0\u3059\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u3066\u3001buf[PIPESIZE-1]\u306e\u5f8c\u306b\u66f8\u304d\u3053\u307e\u308c\u308b\u6b21\u306e\u30d0\u30a4\u30c8\u306fbuf[0]\u3067\u3042\u308b\u3002<br \/>\n\u3057\u304b\u3057nread\u3001nwrite\u306f\u5faa\u74b0\u3057\u306a\u3044\u3002<br \/>\n\u3053\u306e\u6c7a\u307e\u308a\u3054\u3068\u306f\u3001\u30d0\u30c3\u30d5\u30a1\u304c\u3044\u3063\u3071\u3044\u306a\u72b6\u614b\uff08nwrite == nread+PIPESIZE\uff09\u3068\u3001\u30d0\u30c3\u30d5\u30a1\u304c\u7a7a\u3067\u3042\u308b\u72b6\u614b\uff08nwrite == nread\uff09\u306e\u8b58\u5225\u3092\u53ef\u80fd\u306b\u3059\u308b\u3002<br \/>\n\u3057\u304b\u3057\u305d\u308c\u306f\u3001\u30d0\u30c3\u30d5\u30a1\u306e\u30c7\u30fc\u30bf\u3092\u53c2\u7167\u3059\u308b\u3068\u304d\u306b\u3001\u5358\u7d14\u306bbuf[nread]\u3068\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001buf[nread % PIPESIZE]\u3068\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u3068\u3044\u3046\u3053\u3068\u3092\u610f\u5473\u3059\u308b\u3002\uff08nwrite\u306e\u5834\u5408\u3082\u540c\u3058\u3067\u3042\u308b\uff09<br \/>\n2\u3064\u306e\u5225\u306eCPU\u4e0a\u3067piperead\u3068pipewrite\u304c\u540c\u6642\u306b\u547c\u3073\u51fa\u3055\u308c\u308b\u3068\u4eee\u5b9a\u3057\u3088\u3046\u3002<\/p>\n<p>pipe.c<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">#include &quot;types.h&quot;\r\n#include &quot;defs.h&quot;\r\n#include &quot;param.h&quot;\r\n#include &quot;mmu.h&quot;\r\n#include &quot;proc.h&quot;\r\n#include &quot;fs.h&quot;\r\n#include &quot;file.h&quot;\r\n#include &quot;spinlock.h&quot;\r\n\r\n#define PIPESIZE 512\r\n\r\nstruct pipe {\r\n  struct spinlock lock;\r\n  char data&#x5B;PIPESIZE];\r\n  uint nread;     \/\/ number of bytes read\r\n  uint nwrite;    \/\/ number of bytes written\r\n  int readopen;   \/\/ read fd is still open\r\n  int writeopen;  \/\/ write fd is still open\r\n};\r\n\r\nint\r\npipealloc(struct file **f0, struct file **f1)\r\n{\r\n  struct pipe *p;\r\n\r\n  p = 0;\r\n  *f0 = *f1 = 0;\r\n  if((*f0 = filealloc()) == 0 || (*f1 = filealloc()) == 0)\r\n    goto bad;\r\n  if((p = (struct pipe*)kalloc()) == 0)\r\n    goto bad;\r\n  p-&gt;readopen = 1;\r\n  p-&gt;writeopen = 1;\r\n  p-&gt;nwrite = 0;\r\n  p-&gt;nread = 0;\r\n  initlock(&amp;p-&gt;lock, &quot;pipe&quot;);\r\n  (*f0)-&gt;type = FD_PIPE;\r\n  (*f0)-&gt;readable = 1;\r\n  (*f0)-&gt;writable = 0;\r\n  (*f0)-&gt;pipe = p;\r\n  (*f1)-&gt;type = FD_PIPE;\r\n  (*f1)-&gt;readable = 0;\r\n  (*f1)-&gt;writable = 1;\r\n  (*f1)-&gt;pipe = p;\r\n  return 0;\r\n\r\n\/\/PAGEBREAK: 20\r\n bad:\r\n  if(p)\r\n    kfree((char*)p);\r\n  if(*f0)\r\n    fileclose(*f0);\r\n  if(*f1)\r\n    fileclose(*f1);\r\n  return -1;\r\n}\r\n\r\nvoid\r\npipeclose(struct pipe *p, int writable)\r\n{\r\n  acquire(&amp;p-&gt;lock);\r\n  if(writable){\r\n    p-&gt;writeopen = 0;\r\n    wakeup(&amp;p-&gt;nread);\r\n  } else {\r\n    p-&gt;readopen = 0;\r\n    wakeup(&amp;p-&gt;nwrite);\r\n  }\r\n  if(p-&gt;readopen == 0 &amp;&amp; p-&gt;writeopen == 0){\r\n    release(&amp;p-&gt;lock);\r\n    kfree((char*)p);\r\n  } else\r\n    release(&amp;p-&gt;lock);\r\n}\r\n\r\n\/\/PAGEBREAK: 40\r\nint\r\npipewrite(struct pipe *p, char *addr, int n)\r\n{\r\n  int i;\r\n\r\n  acquire(&amp;p-&gt;lock);\r\n  for(i = 0; i &lt; n; i++){\r\n    while(p-&gt;nwrite == p-&gt;nread + PIPESIZE){  \/\/DOC: pipewrite-full\r\n      if(p-&gt;readopen == 0 || proc-&gt;killed){\r\n        release(&amp;p-&gt;lock);\r\n        return -1;\r\n      }\r\n      wakeup(&amp;p-&gt;nread);\r\n      sleep(&amp;p-&gt;nwrite, &amp;p-&gt;lock);  \/\/DOC: pipewrite-sleep\r\n    }\r\n    p-&gt;data&#x5B;p-&gt;nwrite++ % PIPESIZE] = addr&#x5B;i];\r\n  }\r\n  wakeup(&amp;p-&gt;nread);  \/\/DOC: pipewrite-wakeup1\r\n  release(&amp;p-&gt;lock);\r\n  return n;\r\n}\r\n\r\nint\r\npiperead(struct pipe *p, char *addr, int n)\r\n{\r\n  int i;\r\n\r\n  acquire(&amp;p-&gt;lock);\r\n  while(p-&gt;nread == p-&gt;nwrite &amp;&amp; p-&gt;writeopen){  \/\/DOC: pipe-empty\r\n    if(proc-&gt;killed){\r\n      release(&amp;p-&gt;lock);\r\n      return -1;\r\n    }\r\n    sleep(&amp;p-&gt;nread, &amp;p-&gt;lock); \/\/DOC: piperead-sleep\r\n  }\r\n  for(i = 0; i &lt; n; i++){  \/\/DOC: piperead-copy\r\n    if(p-&gt;nread == p-&gt;nwrite)\r\n      break;\r\n    addr&#x5B;i] = p-&gt;data&#x5B;p-&gt;nread++ % PIPESIZE];\r\n  }\r\n  wakeup(&amp;p-&gt;nwrite);  \/\/DOC: piperead-wakeup\r\n  release(&amp;p-&gt;lock);\r\n  return i;\r\n}<\/pre>\n<p>pipewrite\u306f\u3001\u307e\u305a\u30d1\u30a4\u30d7\u306e\u30ed\u30c3\u30af\u3092\u7372\u5f97\u3059\u308b\u3053\u3068\u304b\u3089\u59cb\u3081\u308b\u3002<br \/>\n\u305d\u306e\u30ed\u30c3\u30af\u306f\u3001\u8aad\u307f\u66f8\u304d\u30d0\u30a4\u30c8\u6570\u3001\u30c7\u30fc\u30bf\u3001\u305d\u3057\u3066\u305d\u308c\u3089\u306b\u95a2\u4fc2\u3059\u308b\u30a4\u30f3\u30d0\u30ea\u30a2\u30f3\u30c8\u3092\u4fdd\u8b77\u3059\u308b\u3002<br \/>\npiperead\u3082\u3001\u307e\u305a\u30ed\u30c3\u30af\u306e\u7372\u5f97\u3092\u8a66\u307f\u308b\u304c\u3001\u4e0d\u53ef\u80fd\u3067\u3042\u308b\u3002\uff08\u4eca\u306fpipewrite\u3068piperead\u3092\u540c\u6642\u306b\u5b9f\u884c\u3057\u3066\u308b\u3068\u4eee\u5b9a\u3057\u3066\u308b\u306e\u3067\uff09<br \/>\n\u3053\u3061\u3089\u306f\u30ed\u30c3\u30af\u304c\u89e3\u653e\u3055\u308c\u308b\u307e\u3067acquire\u306e\u3068\u3053\u308d\u3067\u6b62\u307e\u3063\u305f\u307e\u307e\u306b\u306a\u308b\u3002<br \/>\npiperead\u304c\u5f85\u3063\u3066\u308b\u9593\u3001pipewrite\u306f\u6e21\u3055\u308c\u305f\u30c7\u30fc\u30bf\u3092\u30eb\u30fc\u30d7\u30671\u30d0\u30a4\u30c8\u6bce\uff08addr[0], addr[1], \u2026, addr[n-1]\uff09\u306b\u51e6\u7406\u3057\u3001\u305d\u308c\u305e\u308cpipe\u306b\u8ffd\u52a0\u3059\u308b\u3002<br \/>\n\u3053\u306e\u30eb\u30fc\u30d7\u4e2d\u3067\u30d0\u30c3\u30d5\u30a1\u304c\u3044\u3063\u3071\u3044\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3002<br \/>\n\u3053\u306e\u5834\u5408pipewrite\u306f\u3001\u30c7\u30fc\u30bf\u304c\u6e96\u5099\u3067\u304d\u305f\u3068\u3044\u3046\u4e8b\u3092\u30b9\u30ea\u30fc\u30d7\u4e2d\u306e\u8aad\u307f\u8fbc\u307f\u5074\u306b\u4f1d\u3048\u308b\u305f\u3081\u306bwakeup\u3092\u547c\u3073\u3001\u305d\u3057\u3066\u3001\u8aad\u307f\u8fbc\u307f\u5074\u304c\u30d0\u30c3\u30d5\u30a1\u304b\u3089\u3044\u304f\u3089\u304b\u30c7\u30fc\u30bf\u3092\u53d6\u308a\u51fa\u3059\u306e\u3092\u5f85\u3064\u305f\u3081\u306b\u3001&amp;p-&gt;nwrite\u3068\u3044\u3046\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u30b9\u30ea\u30fc\u30d7\u3059\u308b\u3002<br \/>\nsleep\u306b\u3088\u3063\u3066\u3001\u3053\u306epipewrite\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u30d7\u30ed\u30bb\u30b9\u3092\u30b9\u30ea\u30fc\u30d7\u3055\u305b\u308b\u51e6\u7406\u306e\u4e00\u74b0\u3068\u3057\u3066p-&gt;lock\u304c\u89e3\u653e\u3055\u308c\u308b\u3002<\/p>\n<p>\u305d\u3057\u305f\u3089p-&gt;lock\u304c\u7372\u5f97\u53ef\u80fd\u3068\u306a\u308b\u306e\u3067\u3001piperead\u306f\u305d\u306e\u30ed\u30c3\u30af\u3092\u7372\u5f97\u3057\u51e6\u7406\u3092\u958b\u59cb\u3059\u308b\u3002<br \/>\npiperead\u306f\u3001p-&gt;nread != p-&gt;nwrite\u3067\u3042\u308b\u3053\u3068\u306b\u6c17\u3065\u304d\uff08pipewrite\u304c\u30b9\u30ea\u30fc\u30d7\u3057\u305f\u306e\u306fp-&gt;nwrite == p-&gt;nread+PIPESIZE\u306b\u306a\u3063\u305f\u304b\u3089\u3067\u3042\u308b\uff09\u3001\u6700\u521d\u306ewhile\u30eb\u30fc\u30d7\u3092\u30b9\u30ad\u30c3\u30d7\u3059\u308b\u3002<br \/>\n\u305d\u308c\u304b\u3089piperead\u306f\u3001\u30d1\u30a4\u30d7\u304b\u3089\u30c7\u30fc\u30bf\u3092\u30b3\u30d4\u30fc\u3057\u3001nread\u3092\u30b3\u30d4\u30fc\u3057\u305f\u30d0\u30a4\u30c8\u6570\u306e\u5206\u3060\u3051\u30a4\u30f3\u30af\u30ea\u30e1\u30f3\u30c8\u3059\u308b\u3002<br \/>\n\u3053\u308c\u3067\u30d1\u30a4\u30d7\u306b\u307e\u305f\u66f8\u304d\u8fbc\u3081\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u3067\u3001piperead\u306f\u547c\u3073\u51fa\u3057\u5074\u306b\u623b\u308b\u524d\u306b\u3001wakeup\u3092\u547c\u3073\u3001\u30b9\u30ea\u30fc\u30d7\u4e2d\u306e\u66f8\u304d\u8fbc\u307f\u5074\u3092\u8d77\u3053\u3059\u3002<br \/>\nwakeup\u306f\u3001&amp;p-&gt;nwrite\u3068\u3044\u3046\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u30b9\u30ea\u30fc\u30d7\u4e2d\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u63a2\u3059\u3002<br \/>\n\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u306f\u3001pipewrite\u3092\u5b9f\u884c\u4e2d\u3060\u3063\u305f\u304c\u30d0\u30c3\u30d5\u30a1\u304c\u3044\u3063\u3071\u3044\u306b\u306a\u3063\u305f\u306e\u3067\u6b62\u307e\u3063\u3066\u305f\u30d7\u30ed\u30bb\u30b9\u3067\u3042\u308b\u3002<br \/>\nwakeup\u306f\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u3092RUNNABLE\u3068\u3057\u3066\u30de\u30fc\u30af\u3059\u308b\u3002<\/p>\n<p>\u30d1\u30a4\u30d7\u306e\u30b3\u30fc\u30c9\u306f\u3001\u8aad\u307f\u8fbc\u307f\u5074\u3068\u66f8\u304d\u8fbc\u307f\u5074\u3067\u5225\u306e\u30b9\u30ea\u30fc\u30d7\u30c1\u30e3\u30f3\u30cd\u30eb\uff08p-&gt;nread\u3068p-&gt;nwrite\uff09\u3092\u4f7f\u3046\u3002<br \/>\n\u3053\u306e\u3053\u3068\u306b\u3088\u3063\u3066\u3001\uff08\u3042\u307e\u308a\u3042\u308a\u305d\u3046\u3067\u306f\u306a\u3044\u304c\uff09\u591a\u304f\u306e\u8aad\u307f\u8fbc\u307f\u624b\u3068\u66f8\u304d\u8fbc\u307f\u624b\u304c\u540c\u3058\u30d1\u30a4\u30d7\u3092\u5f85\u3064\u3088\u3046\u306a\u5834\u5408\u306b\u3088\u308a\u52b9\u7387\u7684\u306b\u306a\u308b\u3002<br \/>\n\u30d1\u30a4\u30d7\u306e\u30b3\u30fc\u30c9\u306f\u3001\u30b9\u30ea\u30fc\u30d7\u3059\u308b\u6761\u4ef6\u306e\u30c1\u30a7\u30c3\u30af\u3092\u884c\u3046\u30eb\u30fc\u30d7\u306e\u5185\u5074\u3067sleep\u3092\u547c\u3076\u3002<br \/>\n\u8907\u6570\u306e\u8aad\u307f\u624b\u3084\u66f8\u304d\u624b\u304c\u3042\u308b\u5834\u5408\u3001\u6700\u521d\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u9664\u3044\u3066\u3059\u3079\u3066\u8d77\u3053\u3055\u308c\u308b\u304c\u3001\u307e\u3060\u6761\u4ef6\u304c\u507d\u3067\u3042\u308b\u306e\u3067\u518d\u5ea6\u30b9\u30ea\u30fc\u30d7\u3059\u308b\u3002<\/p>\n<h3>\u611f\u60f3<\/h3>\n<p>\u30d1\u30a4\u30d7\u306e\u5b9f\u88c5\u306b\u3064\u3044\u3066\u3067\u3059\u3002<br \/>\nacquire\/relese\u3001sleep\/wakeup\u3092\u4f7f\u3063\u3066\u308b\u306e\u3067\u3001\u80cc\u666f\u307e\u3067\u542b\u3081\u308b\u3068\u7d50\u69cb\u8907\u96d1\u306a\u30b3\u30fc\u30c9\u3060\u3068\u601d\u3044\u307e\u3059\u304c\u3001\u4eca\u307e\u3067\u5b66\u3093\u3060\u5206\u306e\u304a\u304b\u3052\u3067\u3059\u3093\u306a\u308a\u8aad\u3081\u307e\u3057\u305f\u3002<\/p>\n<p>\u305d\u3046\u3044\u3046\u80cc\u666f\u3092\u9664\u3051\u3070\u3001\u3053\u306e\u30b3\u30fc\u30c9\u306e\u30ad\u30e2\u306fpipe\u69cb\u9020\u4f53\u306edata\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u307f\u5faa\u74b0\u5229\u7528\u3055\u308c\u308b\u4e8b\u304b\u306a\u3068\u601d\u3044\u307e\u3059\u3002<br \/>\n\u66f8\u304d\u8fbc\u307f\u3068\u8aad\u307f\u8fbc\u307f\u306f\u5fc5\u305a\u4ea4\u4e92\u306b\u5b9f\u884c\u3055\u308c\u308b\u308f\u3051\u3067\u306f\u306a\u304f\u3001\u307e\u305f\u8aad\u307f\u8fbc\u307f\u30d0\u30a4\u30c8\u6570\u304c\u66f8\u304d\u8fbc\u307f\u30d0\u30a4\u30c8\u6570\u3092\u4e0b\u56de\u308b\u53ef\u80fd\u6027\u3082\u3042\u308b\u3068\u3044\u3046\u3053\u3068\u3092\u8003\u3048\u308b\u3068\u3001\u5faa\u74b0\u4ee5\u5916\u306e\u8003\u3048\u65b9\u306f\u3061\u3087\u3063\u3068\u73fe\u5b9f\u7684\u3058\u3083\u306a\u3044\u6c17\u304c\u3057\u307e\u3059\u3002<\/p>\n<p>\u6700\u5f8c\u306e\u65b9\u306b\u3082\u66f8\u304b\u308c\u3066\u307e\u3059\u304c\u3001sleep\u306f\u305d\u306e\u6761\u4ef6\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u30eb\u30fc\u30d7\u306e\u5185\u5074\u3067\u547c\u3079\u3068\u3044\u3046\u6c7a\u307e\u308a\u3054\u3068\u304c\u3053\u3053\u3067\u3082\u5b88\u3089\u308c\u3066\u307e\u3059\u3002<br \/>\n\u306a\u305c\u305d\u3046\u3059\u3079\u304d\u304b\uff1f\u3063\u3066\u306e\u306f\u3001\u4e00\u8a00\u3067\u8a00\u3048\u3070\u300c\u8d77\u3053\u3055\u308c\u305f\u3068\u304d\u306b\u307e\u3060\u6761\u4ef6\u304c\u6574\u3063\u3066\u306a\u3051\u308c\u3070\u307e\u305fsleep\u3059\u3079\u304d\u3060\u304b\u3089\u300d\u3063\u3066\u3068\u3053\u308d\u3067\u3059\u304b\u306d\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u30c6\u30ad\u30b9\u30c8\u306e59\u301c60\u30da\u30fc\u30b8<\/p>\n<h3>\u672c\u6587<\/h3>\n<p>\u3053\u306e\u7ae0\u306e\u6700\u521d\u306e\u307b\u3046\u3067\u6271\u3063\u305f\u30b7\u30f3\u30d7\u30eb\u306a\u30ad\u30e5\u30fc\u306f\u3001\u307e\u308b\u3067\u304a\u3082\u3061\u3083\u3067\u3042\u308b\u3002<br \/>\n\u3057\u304b\u3057\u3001xv6\u306f\u8aad\u307f\u8fbc\u307f\u3068\u66f8\u304d\u8fbc\u307f\u3092\u540c\u671f\u5316\u3059\u308b\u305f\u3081\u306bsleep\u3068wakeup\u3092\u4f7f\u3046\u3088\u3046\u306a\u672c\u7269\u306e\u30ad\u30e5\u30fc\u30922\u3064\u542b\u3080\u3002<br \/>\n\u3072\u3068\u3064\u306fIDE\u30c9\u30e9\u30a4\u30d0\u3067\u4f7f\u308f\u308c\u308b\u3002<br \/>\n\u30d7\u30ed\u30bb\u30b9\u306f\u30c7\u30a3\u30b9\u30af\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30ad\u30e5\u30fc\u3078\u8ffd\u52a0\u3057\u3001\u305d\u3057\u3066sleep\u3092\u547c\u3076\u3002<br \/>\n\u5272\u308a\u8fbc\u307f\u30cf\u30f3\u30c9\u30e9\u306fwakeup\u3092\u4f7f\u3063\u3066\u3001\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u306b\u305d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u5b8c\u4e86\u3057\u305f\u3053\u3068\u3092\u901a\u77e5\u3059\u308b\u3002<\/p>\n<p>\u3088\u308a\u8907\u96d1\u306a\u5b9f\u4f8b\u3068\u3057\u3066\u306f\u3001\u30d1\u30a4\u30d7\u306e\u5b9f\u88c5\u3067\u3042\u308b\u3002<br \/>\n\u6211\u3005\u306f\u7b2c0\u7ae0\u3067\u30d1\u30a4\u30d7\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u898b\u305f\u3002<br \/>\n\u30d1\u30a4\u30d7\u306e\u4e00\u7aef\u306b\u66f8\u304d\u3053\u307e\u308c\u305f\u30c7\u30fc\u30bf\u306f\u3001\u30ab\u30fc\u30cd\u30eb\u306e\u30d0\u30c3\u30d5\u30a1\u306b\u30b3\u30d4\u30fc\u3055\u308c\u3001\u305d\u3057\u3066\u4ed6\u306e\u4e00\u7aef\u304b\u3089\u8aad\u307f\u8fbc\u3081\u308b\u3088\u3046\u306b\u306a\u308b\u3002<br \/>\n\u5148\u306e\u7ae0\u3067\u306f\u3001\u30d1\u30a4\u30d7\u3092\u53d6\u308a\u5dfb\u304f\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u30b5\u30dd\u30fc\u30c8\u306b\u3064\u3044\u3066\u8aac\u660e\u3059\u308b\u3002<br \/>\n\u3057\u304b\u3057\u4eca\u306f\u3001pipewrite\u3068piperead\u306e\u5b9f\u88c5\u306b\u3064\u3044\u3066\u898b\u3066\u3044\u3053\u3046\u3002<\/p>\n<p>\u30d1\u30a4\u30d7\u306f\u3059\u3079\u3066\u3001pipe\u69cb\u9020\u4f53\u3068\u3057\u3066\u8868\u73fe\u3055\u308c\u308b\u3002<br \/>\n\u305d\u306e\u69cb\u9020\u4f53\u306f\u3001lock\u3068\u30d0\u30c3\u30d5\u30a1\u306e\u305f\u3081\u306edata\u3068\u3044\u3046\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u542b\u3080\u3002<br \/>\nnread\u3068nwrite\u3068\u3044\u3046\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u3001\u305d\u308c\u305e\u308c\u305d\u306e\u30d0\u30c3\u30d5\u30a1\u304b\u3089\u4f55\u30d0\u30a4\u30c8\u8aad\u307f\u8fbc\u3093\u3060\u304b\u3001\u4f55\u30d0\u30a4\u30c8\u66f8\u304d\u8fbc\u3093\u3060\u304b\u3092\u8868\u3059\u3002<br \/>\n\u30d0\u30c3\u30d5\u30a1\u306f\u5faa\u74b0\u3059\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u3066\u3001buf[PIPESIZE-1]\u306e\u5f8c\u306b\u66f8\u304d\u3053\u307e\u308c\u308b\u6b21\u306e\u30d0\u30a4\u30c8\u306fbuf[0]\u3067\u3042\u308b\u3002<br \/>\n\u3057\u304b\u3057nread\u3001nwrite\u306f\u5faa\u74b0\u3057\u306a\u3044\u3002<br \/>\n\u3053\u306e\u6c7a\u307e\u308a\u3054\u3068\u306f\u3001\u30d0\u30c3\u30d5\u30a1\u304c\u3044\u3063\u3071\u3044\u306a\u72b6\u614b\uff08nwrite == nread+PIPESIZE\uff09\u3068\u3001\u30d0\u30c3\u30d5\u30a1\u304c\u7a7a\u3067\u3042\u308b\u72b6\u614b\uff08nwrite == nread\uff09\u306e\u8b58\u5225\u3092\u53ef\u80fd\u306b\u3059\u308b\u3002<br \/>\n\u3057\u304b\u3057\u305d\u308c\u306f\u3001\u30d0\u30c3\u30d5\u30a1\u306e\u30c7\u30fc\u30bf\u3092\u53c2\u7167\u3059\u308b\u3068\u304d\u306b\u3001\u5358\u7d14\u306bbuf[nread]\u3068\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001buf[nread % PIPESIZE]\u3068\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u3068\u3044\u3046\u3053\u3068\u3092\u610f\u5473\u3059\u308b\u3002\uff08nwrite\u306e\u5834\u5408\u3082\u540c\u3058\u3067\u3042\u308b\uff09<br \/>\n2\u3064\u306e\u5225\u306eCPU\u4e0a\u3067piperead\u3068pipewrite\u304c\u540c\u6642\u306b\u547c\u3073\u51fa\u3055\u308c\u308b\u3068\u4eee\u5b9a\u3057\u3088\u3046\u3002<\/p>\n<p>pipe.c<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">#include &quot;types.h&quot;\r\n#include &quot;defs.h&quot;\r\n#include &quot;param.h&quot;\r\n#include &quot;mmu.h&quot;\r\n#include &quot;proc.h&quot;\r\n#include &quot;fs.h&quot;\r\n#include &quot;file.h&quot;\r\n#include &quot;spinlock.h&quot;\r\n\r\n#define PIPESIZE 512\r\n\r\nstruct pipe {\r\n  struct spinlock lock;\r\n  char data&#x5B;PIPESIZE];\r\n  uint nread;     \/\/ number of bytes read\r\n  uint nwrite;    \/\/ number of bytes written\r\n  int readopen;   \/\/ read fd is still open\r\n  int writeopen;  \/\/ write fd is still open\r\n};\r\n\r\nint\r\npipealloc(struct file **f0, struct file **f1)\r\n{\r\n  struct pipe *p;\r\n\r\n  p = 0;\r\n  *f0 = *f1 = 0;\r\n  if((*f0 = filealloc()) == 0 || (*f1 = filealloc()) == 0)\r\n    goto bad;\r\n  if((p = (struct pipe*)kalloc()) == 0)\r\n    goto bad;\r\n  p-&gt;readopen = 1;\r\n  p-&gt;writeopen = 1;\r\n  p-&gt;nwrite = 0;\r\n  p-&gt;nread = 0;\r\n  initlock(&amp;p-&gt;lock, &quot;pipe&quot;);\r\n  (*f0)-&gt;type = FD_PIPE;\r\n  (*f0)-&gt;readable = 1;\r\n  (*f0)-&gt;writable = 0;\r\n  (*f0)-&gt;pipe = p;\r\n  (*f1)-&gt;type = FD_PIPE;\r\n  (*f1)-&gt;readable = 0;\r\n  (*f1)-&gt;writable = 1;\r\n  (*f1)-&gt;pipe = p;\r\n  return 0;\r\n\r\n\/\/PAGEBREAK: 20\r\n bad:\r\n  if(p)\r\n    kfree((char*)p);\r\n  if(*f0)\r\n    fileclose(*f0);\r\n  if(*f1)\r\n    fileclose(*f1);\r\n  return -1;\r\n}\r\n\r\nvoid\r\npipeclose(struct pipe *p, int writable)\r\n{\r\n  acquire(&amp;p-&gt;lock);\r\n  if(writable){\r\n    p-&gt;writeopen = 0;\r\n    wakeup(&amp;p-&gt;nread);\r\n  } else {\r\n    p-&gt;readopen = 0;\r\n    wakeup(&amp;p-&gt;nwrite);\r\n  }\r\n  if(p-&gt;readopen == 0 &amp;&amp; p-&gt;writeopen == 0){\r\n    release(&amp;p-&gt;lock);\r\n    kfree((char*)p);\r\n  } else\r\n    release(&amp;p-&gt;lock);\r\n}\r\n\r\n\/\/PAGEBREAK: 40\r\nint\r\npipewrite(struct pipe *p, char *addr, int n)\r\n{\r\n  int i;\r\n\r\n  acquire(&amp;p-&gt;lock);\r\n  for(i = 0; i &lt; n; i++){\r\n    while(p-&gt;nwrite == p-&gt;nread + PIPESIZE){  \/\/DOC: pipewrite-full\r\n      if(p-&gt;readopen == 0 || proc-&gt;killed){\r\n        release(&amp;p-&gt;lock);\r\n        return -1;\r\n      }\r\n      wakeup(&amp;p-&gt;nread);\r\n      sleep(&amp;p-&gt;nwrite, &amp;p-&gt;lock);  \/\/DOC: pipewrite-sleep\r\n    }\r\n    p-&gt;data&#x5B;p-&gt;nwrite++ % PIPESIZE] = addr&#x5B;i];\r\n  }\r\n  wakeup(&amp;p-&gt;nread);  \/\/DOC: pipewrite-wakeup1\r\n  release(&amp;p-&gt;lock);\r\n  return n;\r\n}\r\n\r\nint\r\npiperead(struct pipe *p, char *addr, int n)\r\n{\r\n  int i;\r\n\r\n  acquire(&amp;p-&gt;lock);\r\n  while(p-&gt;nread == p-&gt;nwrite &amp;&amp; p-&gt;writeopen){  \/\/DOC: pipe-empty\r\n    if(proc-&gt;killed){\r\n      release(&amp;p-&gt;lock);\r\n      return -1;\r\n    }\r\n    sleep(&amp;p-&gt;nread, &amp;p-&gt;lock); \/\/DOC: piperead-sleep\r\n  }\r\n  for(i = 0; i &lt; n; i++){  \/\/DOC: piperead-copy\r\n    if(p-&gt;nread == p-&gt;nwrite)\r\n      break;\r\n    addr&#x5B;i] = p-&gt;data&#x5B;p-&gt;nread++ % PIPESIZE];\r\n  }\r\n  wakeup(&amp;p-&gt;nwrite);  \/\/DOC: piperead-wakeup\r\n  release(&amp;p-&gt;lock);\r\n  return i;\r\n}<\/pre>\n<p>pipewrite\u306f\u3001\u307e\u305a\u30d1\u30a4\u30d7\u306e\u30ed\u30c3\u30af\u3092\u7372\u5f97\u3059\u308b\u3053\u3068\u304b\u3089\u59cb\u3081\u308b\u3002<br \/>\n\u305d\u306e\u30ed\u30c3\u30af\u306f\u3001\u8aad\u307f\u66f8\u304d\u30d0\u30a4\u30c8\u6570\u3001\u30c7\u30fc\u30bf\u3001\u305d\u3057\u3066\u305d\u308c\u3089\u306b\u95a2\u4fc2\u3059\u308b\u30a4\u30f3\u30d0\u30ea\u30a2\u30f3\u30c8\u3092\u4fdd\u8b77\u3059\u308b\u3002<br \/>\npiperead\u3082\u3001\u307e\u305a\u30ed\u30c3\u30af\u306e\u7372\u5f97\u3092\u8a66\u307f\u308b\u304c\u3001\u4e0d\u53ef\u80fd\u3067\u3042\u308b\u3002\uff08\u4eca\u306fpipewrite\u3068piperead\u3092\u540c\u6642\u306b\u5b9f\u884c\u3057\u3066\u308b\u3068\u4eee\u5b9a\u3057\u3066\u308b\u306e\u3067\uff09<br \/>\n\u3053\u3061\u3089\u306f\u30ed\u30c3\u30af\u304c\u89e3\u653e\u3055\u308c\u308b\u307e\u3067acquire\u306e\u3068\u3053\u308d\u3067\u6b62\u307e\u3063\u305f\u307e\u307e\u306b\u306a\u308b\u3002<br \/>\npiperead\u304c\u5f85\u3063\u3066\u308b\u9593\u3001pipewrite\u306f\u6e21\u3055\u308c\u305f\u30c7\u30fc\u30bf\u3092\u30eb\u30fc\u30d7\u30671\u30d0\u30a4\u30c8\u6bce\uff08addr[0], addr[1], \u2026, addr[n-1]\uff09\u306b\u51e6\u7406\u3057\u3001\u305d\u308c\u305e\u308cpipe\u306b\u8ffd\u52a0\u3059\u308b\u3002<br \/>\n\u3053\u306e\u30eb\u30fc\u30d7\u4e2d\u3067\u30d0\u30c3\u30d5\u30a1\u304c\u3044\u3063\u3071\u3044\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3002<br \/>\n\u3053\u306e\u5834\u5408pipewrite\u306f\u3001\u30c7\u30fc\u30bf\u304c\u6e96\u5099\u3067\u304d\u305f\u3068\u3044\u3046\u4e8b\u3092\u30b9\u30ea\u30fc\u30d7\u4e2d\u306e\u8aad\u307f\u8fbc\u307f\u5074\u306b\u4f1d\u3048\u308b\u305f\u3081\u306bwakeup\u3092\u547c\u3073\u3001\u305d\u3057\u3066\u3001\u8aad\u307f\u8fbc\u307f\u5074\u304c\u30d0\u30c3\u30d5\u30a1\u304b\u3089\u3044\u304f\u3089\u304b\u30c7\u30fc\u30bf\u3092\u53d6\u308a\u51fa\u3059\u306e\u3092\u5f85\u3064\u305f\u3081\u306b\u3001&amp;p-&gt;nwrite\u3068\u3044\u3046\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u30b9\u30ea\u30fc\u30d7\u3059\u308b\u3002<br \/>\nsleep\u306b\u3088\u3063\u3066\u3001\u3053\u306epipewrite\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u30d7\u30ed\u30bb\u30b9\u3092\u30b9\u30ea\u30fc\u30d7\u3055\u305b\u308b\u51e6\u7406\u306e\u4e00\u74b0\u3068\u3057\u3066p-&gt;lock\u304c\u89e3\u653e\u3055\u308c\u308b\u3002<\/p>\n<p>\u305d\u3057\u305f\u3089p-&gt;lock\u304c\u7372\u5f97\u53ef\u80fd\u3068\u306a\u308b\u306e\u3067\u3001piperead\u306f\u305d\u306e\u30ed\u30c3\u30af\u3092\u7372\u5f97\u3057\u51e6\u7406\u3092\u958b\u59cb\u3059\u308b\u3002<br \/>\npiperead\u306f\u3001p-&gt;nread != p-&gt;nwrite\u3067\u3042\u308b\u3053\u3068\u306b\u6c17\u3065\u304d\uff08pipewrite\u304c\u30b9\u30ea\u30fc\u30d7\u3057\u305f\u306e\u306fp-&gt;nwrite == p-&gt;nread+PIPESIZE\u306b\u306a\u3063\u305f\u304b\u3089\u3067\u3042\u308b\uff09\u3001\u6700\u521d\u306ewhile\u30eb\u30fc\u30d7\u3092\u30b9\u30ad\u30c3\u30d7\u3059\u308b\u3002<br \/>\n\u305d\u308c\u304b\u3089piperead\u306f\u3001\u30d1\u30a4\u30d7\u304b\u3089\u30c7\u30fc\u30bf\u3092\u30b3\u30d4\u30fc\u3057\u3001nread\u3092\u30b3\u30d4\u30fc\u3057\u305f\u30d0\u30a4\u30c8\u6570\u306e\u5206\u3060\u3051\u30a4\u30f3\u30af\u30ea\u30e1\u30f3\u30c8\u3059\u308b\u3002<br \/>\n\u3053\u308c\u3067\u30d1\u30a4\u30d7\u306b\u307e\u305f\u66f8\u304d\u8fbc\u3081\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u3067\u3001piperead\u306f\u547c\u3073\u51fa\u3057\u5074\u306b\u623b\u308b\u524d\u306b\u3001wakeup\u3092\u547c\u3073\u3001\u30b9\u30ea\u30fc\u30d7\u4e2d\u306e\u66f8\u304d\u8fbc\u307f\u5074\u3092\u8d77\u3053\u3059\u3002<br \/>\nwakeup\u306f\u3001&amp;p-&gt;nwrite\u3068\u3044\u3046\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u30b9\u30ea\u30fc\u30d7\u4e2d\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u63a2\u3059\u3002<br \/>\n\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u306f\u3001pipewrite\u3092\u5b9f\u884c\u4e2d\u3060\u3063\u305f\u304c\u30d0\u30c3\u30d5\u30a1\u304c\u3044\u3063\u3071\u3044\u306b\u306a\u3063\u305f\u306e\u3067\u6b62\u307e\u3063\u3066\u305f\u30d7\u30ed\u30bb\u30b9\u3067\u3042\u308b\u3002<br \/>\nwakeup\u306f\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u3092RUNNABLE\u3068\u3057\u3066\u30de\u30fc\u30af\u3059\u308b\u3002<\/p>\n<p>\u30d1\u30a4\u30d7\u306e\u30b3\u30fc\u30c9\u306f\u3001\u8aad\u307f\u8fbc\u307f\u5074\u3068\u66f8\u304d\u8fbc\u307f\u5074\u3067\u5225\u306e\u30b9\u30ea\u30fc\u30d7\u30c1\u30e3\u30f3\u30cd\u30eb\uff08p-&gt;nread\u3068p-&gt;nwrite\uff09\u3092\u4f7f\u3046\u3002<br \/>\n\u3053\u306e\u3053\u3068\u306b\u3088\u3063\u3066\u3001\uff08\u3042\u307e\u308a\u3042\u308a\u305d\u3046\u3067\u306f\u306a\u3044\u304c\uff09\u591a\u304f\u306e\u8aad\u307f\u8fbc\u307f\u624b\u3068\u66f8\u304d\u8fbc\u307f\u624b\u304c\u540c\u3058\u30d1\u30a4\u30d7\u3092\u5f85\u3064\u3088\u3046\u306a\u5834\u5408\u306b\u3088\u308a\u52b9\u7387\u7684\u306b\u306a\u308b\u3002<br \/>\n\u30d1\u30a4\u30d7\u306e\u30b3\u30fc\u30c9\u306f\u3001\u30b9\u30ea\u30fc\u30d7\u3059\u308b\u6761\u4ef6\u306e\u30c1\u30a7\u30c3\u30af\u3092\u884c\u3046\u30eb\u30fc\u30d7\u306e\u5185\u5074\u3067sleep\u3092\u547c\u3076\u3002<br \/>\n\u8907\u6570\u306e\u8aad\u307f\u624b\u3084\u66f8\u304d\u624b\u304c\u3042\u308b\u5834\u5408\u3001\u6700\u521d\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u9664\u3044\u3066\u3059\u3079\u3066\u8d77\u3053\u3055\u308c\u308b\u304c\u3001\u307e\u3060\u6761\u4ef6\u304c\u507d\u3067\u3042\u308b\u306e\u3067\u518d\u5ea6\u30b9\u30ea\u30fc\u30d7\u3059\u308b\u3002<\/p>\n<h3>\u611f\u60f3<\/h3>\n<p>\u30d1\u30a4\u30d7\u306e\u5b9f\u88c5\u306b\u3064\u3044\u3066\u3067\u3059\u3002<br \/>\nacquire\/relese\u3001sleep\/wakeup\u3092\u4f7f\u3063\u3066\u308b\u306e\u3067\u3001\u80cc\u666f\u307e\u3067\u542b\u3081\u308b\u3068\u7d50\u69cb\u8907\u96d1\u306a\u30b3\u30fc\u30c9\u3060\u3068\u601d\u3044\u307e\u3059\u304c\u3001\u4eca\u307e\u3067\u5b66\u3093\u3060\u5206\u306e\u304a\u304b\u3052\u3067\u3059\u3093\u306a\u308a\u8aad\u3081\u307e\u3057\u305f\u3002<\/p>\n<p>\u305d\u3046\u3044\u3046\u80cc\u666f\u3092\u9664\u3051\u3070\u3001\u3053\u306e\u30b3\u30fc\u30c9\u306e\u30ad\u30e2\u306fpipe\u69cb\u9020\u4f53\u306edata\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u307f\u5faa\u74b0\u5229\u7528\u3055\u308c\u308b\u4e8b\u304b\u306a\u3068\u601d\u3044\u307e\u3059\u3002<br \/>\n\u66f8\u304d\u8fbc\u307f\u3068\u8aad\u307f\u8fbc\u307f\u306f\u5fc5\u305a\u4ea4\u4e92\u306b\u5b9f\u884c\u3055\u308c\u308b\u308f\u3051\u3067\u306f\u306a\u304f\u3001\u307e\u305f\u8aad\u307f\u8fbc\u307f\u30d0\u30a4\u30c8\u6570\u304c\u66f8\u304d\u8fbc\u307f\u30d0\u30a4\u30c8\u6570\u3092\u4e0b\u56de\u308b\u53ef\u80fd\u6027\u3082\u3042\u308b\u3068\u3044\u3046\u3053\u3068\u3092\u8003\u3048\u308b\u3068\u3001\u5faa\u74b0\u4ee5\u5916\u306e\u8003\u3048\u65b9\u306f\u3061\u3087\u3063\u3068\u73fe\u5b9f\u7684\u3058\u3083\u306a\u3044\u6c17\u304c\u3057\u307e\u3059\u3002<\/p>\n<p>\u6700\u5f8c\u306e\u65b9\u306b\u3082\u66f8\u304b\u308c\u3066\u307e\u3059\u304c\u3001sleep\u306f\u305d\u306e\u6761\u4ef6\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u30eb\u30fc\u30d7\u306e\u5185\u5074\u3067\u547c\u3079\u3068\u3044\u3046\u6c7a\u307e\u308a\u3054\u3068\u304c\u3053\u3053\u3067\u3082\u5b88\u3089\u308c\u3066\u307e\u3059\u3002<br \/>\n\u306a\u305c\u305d\u3046\u3059\u3079\u304d\u304b\uff1f\u3063\u3066\u306e\u306f\u3001\u4e00\u8a00\u3067\u8a00\u3048\u3070\u300c\u8d77\u3053\u3055\u308c\u305f\u3068\u304d\u306b\u307e\u3060\u6761\u4ef6\u304c\u6574\u3063\u3066\u306a\u3051\u308c\u3070\u307e\u305fsleep\u3059\u3079\u304d\u3060\u304b\u3089\u300d\u3063\u3066\u3068\u3053\u308d\u3067\u3059\u304b\u306d\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32],"tags":[405],"class_list":["post-1564","post","type-post","status-publish","format-standard","hentry","category-tech","tag-xv6"],"_links":{"self":[{"href":"https:\/\/peta.okechan.net\/blog\/wp-json\/wp\/v2\/posts\/1564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/peta.okechan.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/peta.okechan.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/peta.okechan.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/peta.okechan.net\/blog\/wp-json\/wp\/v2\/comments?post=1564"}],"version-history":[{"count":0,"href":"https:\/\/peta.okechan.net\/blog\/wp-json\/wp\/v2\/posts\/1564\/revisions"}],"wp:attachment":[{"href":"https:\/\/peta.okechan.net\/blog\/wp-json\/wp\/v2\/media?parent=1564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/peta.okechan.net\/blog\/wp-json\/wp\/v2\/categories?post=1564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/peta.okechan.net\/blog\/wp-json\/wp\/v2\/tags?post=1564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}