이거 궁금했던 친구들 많을텐데

너희 stdin 같은거 죄다 파일인거 알지?

그거 실제로
proc 인가 들어가서 찾아가봐

프로세스들 stdin같은거 다 fd 0 1 2로 나와있어.

fork가 파일을 공유하는것까지 알지?


난 첨에 그걸 sudo vim으로 열어봤었다.


내가 키보드누르면 여기에 아주빠르게 글자가담겼다가
즉시 프로세스가 깨어나서 글자를 다시 가져가는걸까?

"왜 비어있는거지?"



그리고,
이생각을 했었다.


a가 fork해서 b를 만들어.

a는 stdin으로부터 입력을 대기중

즉 키보드입력대기일텐데

b가 sleep(1) 을 섞어가면서
주기적으로 stdin에다가 write를 하면


그러면 a는 키보드입력을받았다고 착각할까?


이 생각을 했었다고.


이거 궁금한새끼 없냐?


이걸 설명하려면

inode가 무엇인지, 그리고 char inode는 안의 데이터구조가 어떠하며,
그녀석들의 read는 tty (혹은 pts)라는 커널자료구조와 대응되고

키보드인터럽트 및 시리얼포트는 해당 자료구조를 통해 관리되고

그 자료구조안에 세가지의 queue가 있으며

다시 그 큐에따라 프로세스 대기가 세션, pgrp과 시그널에 의해 관리되고,


여기까지 이해하고난다음엔

드디어 대답으로

queue가 세개인데
우리는 문자디바이스의 write_q에 글씨를 새길 수 있지만 read_q와 secondary 에는 데이터를 못집어넣는다는점,

그리고 stdin out err 모두 동일한 문자디바이스기에
0에쓰나 1에쓰나 2에쓰나 차이가없어보였다는점.

으로 정리가 가능함.

내가 작년에 이거가지고 엄청 질문해댔던거 기억하는사람들은 있을련지 모르겠음.


stdin 과 pgrp은 운영체제를 입문하기에 좋은 호기심의 출발점인듯.

그 다음에는 파일이 어떻게 메모리매핑되는가
파일시스템.

운영체제 왜 배워야하냐? 고 물으면
일단 단편적으로는 그 두개를 꼽을듯

근데 시그널같은 시스템프로그래밍까지 넘어가도 이게 또 필수임.

시그널은 보니까 운영체제 깊게 안뜯어보면 써먹기 곤란할거다