시그널 보내기.


커널은 목적지 프로세스의 컨텍스트 내에 있는 일부 상태를 갱신해서 시그널을 목적지 프로세스로 보낸다(배달한다).

시그널은 다음 두 가지 이유 중의 하나로 배달된다: (1) 커널이 0으로 나누기나 자식 프로세스의 종료 같은 시스템

이벤트를 감지했다. (2) 어떤 프로세스가 커널에 명시적으로 시그널을 목적지 프로세스에 보낼 것을 요구하기 위해서

kill함수를 호출하였다(다음 절에서 설명). 프로세스는 시그널을 자기 자신에게 보낼 수 있다.


시그널 받기.


목적지 프로세스는 배달된 신호에 대해서 커널이 어떤 방식으로 반응해야 할 때 목적지 프로세스는 시그널을 받는다. 프로세스는 시그널

핸들러라고 부르는 사용자수준의 함수를 실행해서 시그널을 무시하거나, 종료하거나, 획득할 수 있다.

그림 8.27은 시그널을 획득하는 핸들러의 기본 아이디어를 보여준다.




여기서


목적지 프로세스는 배달된 신호에 대해서 커널이 어떤 방식으로 반응해야 할 때 목적지 프로세스는 시그널을 받는다.



이 대목. 약간 크리티컬한 부분이거든.

내가보기엔 그러니까 "어 그렇지 그렇지 이런 미묘한게 궁금한거지. 역시 Cs:app은 명작이라니까" 할만한 그런영역에서

번역이 이상해짐.


번역이 이상해졌다? 싶으면 오히려 그래서 "어 뭐야 나보고 이 대목에 뭔가 있으니까 집중하라는거네" 오히려 그걸 느껴.


그렇게 따지면 오히려 원서보다 번역서가 더 도움이 되겠네???


여하튼 이래.


그러니까


어 이부분은 추상화레이어만 대충 핥고 넘어가지 않고 그 아래의 무언가를 담고있다!

하는 그런대목에서 꼭 번역이 이상해진단말야. 그러니까 의심스러울수밖에 없어. (어... 번역하신분 이 대목 이해 못하셨다)





내가보기에 저


목적지 프로세스는 배달된 신호에 대해서 커널이 어떤 방식으로 반응해야 할 때 목적지 프로세스는 시그널을 받는다.



이 대목이 뭐냐면, 원래 시그널은 커널이 직접 컨텍스트를 수정하는 방식으로 dst 한테 처분이 이루어지는건데, (예를들면, SIGCONT 라던지 SIGKILL 같은것들)

dst 프로세스한테 핸들러가 배정되어있으면, 그게 아니라, 해당 프로세스를 직접 run 시킨다음에, 해당 프로세스가 직접 자신의 핸들러로 인터럽트를 갔다 오도록,

시그널을 직접 dst 프로세스한테 전달해준다는 의미임.





당연히 어렵지. 왜냐면 내가 어제 했던 고민이 딱 이런 부분에서 등장하고있잖아.


글고 CS:app이 진짜 대단한게 뭐냐면,




그 다음 대목으로


보내졌지만 아직 받지 않은 시그널은 펜딩 시그널이라고 부른다. ㄱ시간상으로 어떤 시점에서, 특정 타입에 대해 최대 한 개의 펜딩 시그널이 존재할 수 있다. 만일 어떤 프로세스가 타입 k의 펜딩 시그널을 가지고 있다면 이 프로세스로 다음에 발생하는 k 타입의 시그널은 큐에 들어가지 않는다.




환상적이지 않냐????



얘들은, 어 너 고생 많았다. 답 알려줄게. ㅇㅇㅇ clear? 이런식으로



환상이다.



내가 자꾸 프갤에다가


~~에 나올거 같은데~~ 라고 표현하는 이유도 대충 알겠음??



한 5장까지 읽고나니까


그냥 대충 주루룩 넘겼어. 아 시발.... 나 뭔가 이미 득도한거같다. 근데 디테일이 없다.

이거 앞으로 뭘 다루게 될지 알거같다. 하고 주루룩 넘겼음.



아 이 책이 뭐하는 책인지 알았다.



걍 2장부터 9장까지 진짜


기가막히게 연결되어있다.



4장을 하기 위해서, 3장, 3장을 하기위해서 2장이 표현되었고,


그 맥락 위에서 5장을 이야기할 수 밖에 없고, 6장을 이야기할수밖에없고...



기본적으로 CS:app 이 뭐하는 책인지는 아냐???



컴퓨터 시스템 "프로그래머의 관점" 이다.



이 책을 읽으면 나처럼 강제적으로,





C를 어셈블리레벨로, 어셈블리는 다시 ILP 레벨로 생각해보자



가 된다.



그거 하려고


이 책이 있는거야.



프로그래머들이 맨날


C언어 질문올리고

이럴때 왜 버그가 생기는지 그 뭔가



아 이거 뭔가 있는데... 너무 로우 해! 하고 넘기는 그런것들있지???



그거 해결해주는게 이거다.






하드웨어도 중요하고, 링커도 중요하다


거기다가



아니 도대체 기계에서 주소를 어떻게 비트로 인식해요?


가상메모리가 중요하다.



그리고 결국은 가상메모리가 9장으로 완결되는것도.


그리고, 아니 .s파일들은 각종 링커기호들로 연결되어있는데, 도대체 어셈블리가 기계어랑 1대1대응이라고 할 수 있습니까?


가 7장에서 해결되는것도.



그리고,


9장. 결국에 프로그래머 입장에서의 최 저 수준은 하드웨어위에 바이너리를 박는것이지만,

그 바이너리를 박는 행위 자체가 운영체제에 의존성이 있다는것을 알려주는



운영체제와 하드웨어의 깊은 바인딩,


우리가 천공카드를 쓸 것이 아니라면, 하드웨어의 최 저수준의 직접제어에서 운영체제를 빼놓을수 없음을


8장이 알려주고 있다.



그리고 거기서 9장 가상메모리를 통해서 내용이 완결되고,


10장부터는 일종의 C 시스템콜들을 다루는 것으로 완결되는거다. (네트워크와 쓰레드와 같은 개념들이 부연설명이 들어가고)