마지막
Shared on June 16, 2026
이미 시작했으면 대단한 결심을 한 거고 또 운명이니까 나머지 반을 잘 살아나는 부담을 덜어주는 이미 시작했으니까 반은 된 거다 그런 거 아닌가 신체로는 그럼 맞는 거 같지 않아요? 그렇죠? 여러분들이 지금까지 아마 다양한
자기만이 아는 그런 경험들을 했을텐데 시작이 없으면 사실 아무것도 없죠. 뭔가 시작한다는 거 물론 그 시작을 위해서 많은 고민을 하게 되지만 결국 그 과정을 통해서 중요한 건 시작하는 거다. 그래서 3월 첫 주에 시작을 했고요. 같이
당연히 중간과정 중요한데 또 마지막 끝을 시작이 있으면 어떤 거든 다 끝이 있는 것 같아요. 기간의 정도 차이만 있을 뿐이지 그냥 끝이 있죠. 끝을 강조하는 표현이 있잖아요. 유종의 미. 그쵸? 유종의 미이라는 것 같아요. 과정이 어땠든 만족스러웠든 아니면 조금 아쉬웠든 어쨌든 마지막을 잘 마무리하는 게 중요하다는 것 아닌가 싶어요. 그런 의미에서 아마 여러분들은 제가 생각하기엔 그래도 유종의 미을 위해서 오늘 수업에 참석하신 거 아닌가 라는 생각이 듭니다. 진짜 끝은 이제 여기까지 다 되시고 이번 주 금요일
시험. 시험이라는 게 사람을 스트레스 있게 하는데 숙지하는 사람이 저는 참 힘들거든요. 난이도도 봐야 되고 지난번 주간고사 여러분들이 한 그것도 보면서 주말고사 난이도도 열심히 공부하는 학생들은
그런 어떤 그런 것들이 실력관이 되고 만들어드려야 되니까 물론 시험을 치료는 학생보다는 덜 할지 않고 저는 저 마음의 기준과 저 마음의 시간을 융통성 있게 하니까 그렇죠. 어쨌든 그런 시험이 여러분들에게는 아마 중요한 미가 아닐까 싶습니다. 그래서 오늘 하시는 강좌 교훈을 어떤 내용을 준비할까 처음에는 그냥 제가 지난 번 수요일 날에 말씀드렸지만 혹시 질문이 있거나 여러 부분이 있으면 간단하게 듣고 강화국에서 우리 랩에서 하고 있는 것도 이런 거 소개를 해드리겠다.
그러려고 했는데, 생각해보니까 여러분들이 지금 당장 또 앞에 스트레스 받은 것을 하고 있는데 한 달 앞에 다음 학기 수업을 소개를 하고 또 우리 랩에서 하는 점, 물론 저는 조금 더 시간 투자해서 설명드리고 싶은 욕심이 있지만
반대로 생각해보면 관심이 있는 학생들은 아마 저한테 먼저 연락을 하겠죠. 연락하지 않는 학생들은 별로 관심이 없다는 건데 제가 일방적으로 정보를 제공하려고 애쓰는 건 시차간의 시간 남비인 것 같다는 생각이 들었습니다. 그래서 여러분들이 당장 입 앞에 있는 부분들에 오늘 출석한 여러분들에게 조금 더 그래도 도움이 되는 내용으로 강의 자료를 꼭 던건내
새롭게 준비했습니다. 제목은 지난 중간고사를 간단하게 말씀드렸었죠. 구말고사는 원래 계획이 없었는데 구랄이야, 다행히, 구말이 좀 있어서 구말고사를 준비하는데 도움을 드릴 수 있는 리뷰 세션을 준비합니다. 자유롭게 쭉 쭉
보다보니까 꽤 많은 내용을 여러분들에게 전달해 드리려고 했었던 것 같은데 큰 주제는 운용체제였죠. OS이었습니다. 중간고사 이전에 우리가 메모리에 로딩한 익스큐션 가능한 코드를 실행될 수 있도록 메모리에 로딩한 다음에
그 과정에서 어셈블러와 인컷 로더라고 하셨는 소피를 공부를 했고 그 다음에 이제 중요한 건 결국 실행이지 않겠습니까? 그죠? 아무리 준비를 잘해도 결국 실행이 되지 않으면 결과 원하는 아웃풋을 얻을 수가 없으니까 실행하는 단계
가장 중요하고 그 단위가 프로세스나 프레드가 될 텐데 그 과정을 위해서 동작하는 그런 시스템 소프트웨어인 본형 체제에 대해서 기본적인 그런 내용을 앞에서 우리가 했던 연관된 내용을 준비했었습니다.
맨 처음에 그래서 목적이 뭐냐 운영체제의 목적에 대해서 먼저 이야기를 했었죠. 시행될 수 있는 그런 판결, 그러니까 큰 의미 없이 여기 보면 convenient to use 그리고 efficient and safe safely
실행될 수 있는 안전하고 효율적이고 그 다음에 편리하게 위는 유저 관점이라고 말씀드렸었고 아래는 hardware, device 그 관점이라고 말씀드렸습니다. 중간에 어떤 역할을 해주는게 OS가 되는 거죠. 그래서 여러분이 한번 크게 정리를 해보시면 우리가 공부했던 것들이 사실 여기에 연관되어 있다 라고 보시면 될 것 같아요. Continue to use 쪽에서는 resource라고 하는 다양한 device일 수도 있고
여러 객체들에 대해서 에프트럭션을 제공함으로써 유저가 아주 디테일한 복잡한 내용까지 모르더라도 사용할 수 있도록 환경을 제공해주는 거고 그 다음에 유저가 사용하는데 있어서 물리적으로는 한계가 있을지 모르지만 그걸 느끼지 못하게 마치 무한한 리소스 자원이 제공되는 것처럼 느끼도록 만들어주는 퍼트럭라이징션
물론 이 부분 보다는 조금 더 하드웨어 쪽에 저희가 OS를 공부하다고 보면 아무래도 집중되는 게 사실이긴 합니다. 이쪽도 굉장히 중요한데, 그래서 저희 시험관계상 이렇게 보면 이 Fission and Safe Matter로 하드웨어를 사용하는 쪽, resource sharing, resource protection.
네, 네, 이야기. 그리고'페파'라고 볼 수가 있겠죠. 제가 오늘 강의는 녹화를 일곱 안 하는 겁니다. 오늘 강의 자료는 PDF도 다 올려봤어요. 제가 이미. 잠시만 또 여기 온 여러분들은 저사, 책가를 선물을 드려야 되지 않겠습니까? 그렇죠? 녹화는 안 합니다.
출석 인정해주는 건 충분하지 않을까. 그래서 결국 우리가 하드웨어 이야기가 나오고 OS 입장에서는 하드웨어라는 것도 굉장히 중요한 관리 대상, 제어하는 대상이기 때문에 이 그림을 먼저 다시 한번 봤었습니다. 어떤 시스템이 어떻게 동작하는지 라는 이야기를 하면서 결국은 CPU와 다양한 디바이스들이 메모리에 데이터를 올려놓고 CPU 사이트를 따라서 메모리와 다양한 디바이스들, 중간에 컨트롤러들이 있고요. 그렇죠?
이런 이야기를 했었고 여기서 중요한 게 CPU가 메모리에 올려서 뭔가를 실행을 하려면 IO operation이 굉장히 중요하다. IO라는 건 transfer from the IO device to the controller or vice versa. 양방향으로. 그러면서 우리가 IO에 대해서 먼저 이야기를 했습니다. 다양한 방법이 있다. 프로그램드 IO, 인터뷰뷰드 IO, DMA이 아니라.
프로그래밍도 아이오는 폴링 방식으로 cpu가 모든 것을 반장하고 매니저히 제어하기 위해서 주기적으로 아이오 디바이스의 상태를 해서 체크하는거죠. 물론 아이오 디바이스 자체가 아니라 디바이스의 폴러의 상태를
직접 하는 거긴 하지만 그리고 외기상품을 보면 CPU가 직접 데이터를 트랜스포하는 데 반영하는 데 단점은 시간 낭비가 발생할 수 있어야겠죠. Easy Weight입니다. CPU는 굉장히 바쁜데 실제로 CPU를 고려낸 연산을 위해서 바쁜 게 아니라 연산을 하기 위한 준비 이게 제대로 있는지를 체크하는 데 너무 많은 시간을 쓴다. Easy Waiting이라고 하죠.
그래서 이런 단점을 해결하기 위해서 나온게 인프럭 드리브 라이브. 그리고 말 그대로 역할을 반대로 하는거죠. cpu가 계속 체크하는게 아니라 뭔가 문제가 있으면 스토츠로러가 cpu에게 알려주는. 그걸 지금 인프럭이라고 했었구요.
CPU 입장에서는 당연히 또한 위의 I/O보다는 조금 더 효율적이다. 아무래도 뭔가 용역을 준 거니까요. 근데 이것도 마찬가지로 조금 단점이 있다고 그랬죠? 특히 데이터의 어떤 large amount of data를 해야 되는 경우에는 여전히 CPU
부담이 좀 있다. 왜냐하면 어쨌든 알려주긴 하지만 실체로 하는 것을 CPU가 해야 되다 보니까 이게 너무 커지면 도전이 CPU 부담을 제로로 만들 수 없기 때문에 그래서 나온 게 우리가 DMA, Iron Memory Access, RIO, 그렇죠? 그 아예 CPU가 아니라 DMA 컨트롤러라고 하는 애가 직접 데이터 트렌더를 실행해
수행하는 CPU 입장에서는 데이터 프레스퍼에 관한 데이터 아이오 오퍼레이션에 관한 거 완전히 제거가 되겠습니까? 그런 대명이 DMA 부분이었습니다. 그럼 여러분들 당연히 이 아이오 기법들이 어떤 거고 어떤 장단점이 있고 이런 부분들을 좀 구분할 수 있으셔야 되겠죠?
그 다음에 두 번째는 리소스 프로텍션이었어요. 학교 입장에서 OS의 중요한 역할 중에 하나는 뭔가 오염된 것, 공격 이런 거로 방화해 줄 수 있는 그런 부분이다. 그래서 듀얼모드 오퍼레이션, 뮤지얼모드와 터널모드 나누어서
이 커널로그 같은 경우는 all privileged instructions only is true in the corner mode. 프리블리지트 인스트럭션이라는 것이 좋은 문제입니다. 그 다음에 이때 이 프리블리지트는 만약에 당연히 이런 어떤 인스트럭션들 중요도가 높은 인스트럭션들은 커널로그에서
그래서 OS가 완전히 유저로부터 독립, 그런 상태에서 해야 되는데 가끔은 유저가 그걸 실행을 시공하는 경우가 있을 수 있다. 그럴 수 있는 exception 이라고 하는 것입니다. 그래서 여기서 exception 이라고 하면 일종의 소프트웨어 인터럽이라고 할 수 있고 일반적으로 말하는 인터럽은 하드웨어 인터럽이라고 할 수 있다.
이걸 이해하다 보면 인트로라는 건 소프트웨어 인트로와 하드웨어 인트로로 나눌 수 있다. 이런 식으로 접근할 수도 있는 거고요. 여기 가시면 용어를 아예 달리해서 인트로라는 건 소프트웨어 인트로라는 건 소프트웨어 인트로라는 건 소프트웨어 인트로라는 건 소프트웨어 적으로 보니까 사건의 진로 때문에.
예로 들었던 게 명소 나눈다든가 이런, 이건 뭐 하드웨어의 문제는 아닌데, 연상 과정에서 확실한 오류잖아요. 그런 것들을 우리가 익스 액션, 이렇게 해서, 이럴 경우에는 또 나중에 여기가 나오지만, 그 IPC 방법 중에 하나의 시그너, 이렇게 연결이 돼서,
그 시그널을 또 소프트인트로 한다. 인셉션, 세트다운, 소프트인트로 유사한 컨셉, 관련된 컨셉이라고 하는 거고요. 중요한 건 실제로 명령어를 수행할 때 중요한 게 유저 모드로부터 커널 모드로 트랜지션하는 과정.
이때 과제되는게 인트로 이나 혹은 시스템콜 다양한 시스템콜 명령어 다양한 인트로 즉세기가 존재합니다. 그런 다음에 우리가 스트로라 하는 주제로 전환을 했었어요. 여기서 우리가 간단한 과제였고 예비군 훈련과 같이 하는 친구들과 재미있는 시간을 가졌던 주제가 바로 이 주제였죠. 보이스의 구조를 크게 보면 모노리딕과 마이크로 커널로 나눌 수 있고
그리고 모노리딜이라는게 트래디셔널 유닉스, 그리고 미닉스. 반면 마이크로터널 어프로치 스탑션은 미닉스. 사람 이름도 등장하고 이랬었습니다. 우리는 조금 더 리눅스 쪽에 초점을 낮춰서 본다면 리눅스는 마이크로터널이 아닌 모노리딜 어프로치를
택하고 있고요. 다만 모노리픽이 갖고 있는 단점을 극복하기 위해서 모듈러 어프로치, 모듈러 디자인. 원타임에도 터널이 모디파이 될 수 있도록 하는 그런 기믹이고 그 개념을 LKM, 모듬 터널 모듈을 수 있습니다.
물론 여기 많은 내용이 있지만 이런 내용들로 요약해 볼 수 있을 것 같고 OS 입장에서 Linux의 core function이라고 하면 크게 5가지가 있다고 이야기를 했었습니다. Process Management, Memory Management, File System Management, Value Management, Natural Management 이 중에서 우리는 Memory Management를 제외하고 다만 진료들을
그리고 또 버티콜터 같다 보시면 좋을 것 같고요. 그래서 이제 OS의 역할 이게 결국 리눅스, OS의 코어 펑션이니까 메모리 매니지먼트를 제외하고 우리가 나머지 내용들을 공부하는 그런 과정을 거쳤었습니다.
첫 번째로 I/O Management 관점에서 Voice Counter의 역할을 크게 두 가지로 나눴었죠. Device Control, Operation Management. 왜냐하면 I/O Device 자체가 굉장히 다양하니까 그것들을 관리하기 위한 다양한 방법들이 필요한데 이걸 한마디로 I/O Sub-System.
이라고 부른다 하는 거고요. 그리고 또 이 I/O 서브 시스템의 핵심은 이런 Device Driver Module이다. 적도나 이런 부분들을 가려주는 일종의 Abstraction을 통해서 device hardware에 확답한 거 몰라도 OS를 관리할 수 있도록 만들어주는 Device Driver Module이 있게 되고요.
두 번째 중요한 역할, I/O 매니지먼트 관점에서, 오퍼레이션 매니지먼트, 그렇죠? 이때 등장했던 굉장히 중요한 컨셉이, 스트링 모델이라는 개념이었습니다. 왜냐하면, I/O 오퍼레이션, 폰 트랜작션이라고 하는 건, 프로그램이,
데이터바이트를 소스와 데스네이션 간의 방향성을 가지고 이동시킨 거라고 있었죠. 스퀘인 모델에 대해서 결국 플로어바이트 이런 관점에서 바라볼 수 있다라는 거였고요. 물론 프로그래머의 입장에서는 스퀘인이라는 걸 결국
File Time Structure에 대한 포인터이긴 하지만 컨셉적으로 보면 데이터의 큰 방향성을 갖고 있는 스트링이다 라고 이야기를 했구요. 스트링을 관리하기 위해서 OS는 다양한 Function Core를 사용한다. 그래서 FOpen
통해서 스트링 커넥션을 맺고 그 다음에 여기 지금 보이는 다양한 F-scan, F-print, F-read, F-write, 그리고 또 read-write 같은 시스템 레벨을 펼쳐서 이런 것들을 통해서 기재 데이터 트랜스포츠가 일어나는 거죠. 끝나면 Close를 통해서 스트링 커넥션을 해제하는 거죠.
그런 과정이었습니다. 그래서 구체적으로 저런 펑션들 우리가 그냥 뭐랄까요 당연한 듯 썼던 게 사실은 IO의 스트링 모델에 기반을 둔 거다라는 것을 개념적으로 같이 공유하면서 그 다음에 몇 가지 샘플을 통해서 실제 이런 펑션들을 사용하는 이런 예까지 자료에 담겨져 있습니다. 그런 문의도 참고하실 필요가 있습니다.
그리고 그 과정에서 결국 흐름이니까 소스와 데스레이션 간에 결국 이 Flow of Bytes를 흘려보내는 과정에서 Furring이라고 하는 컨셉이 중요하고 해지죠. 왜냐하면 속도의 차이라든가 아니면 보내고 받을 수 있는 용량의 차이 이런 부분도 생길 수 있기 때문에 Furring이라고 하는 게 중요하다.
세 가지 종류의 버퍼링이 있는데 블록 버퍼링, 라인 버퍼링, 아니면 아예 버퍼링이 없는 언 버퍼링 세 가지 타입이 있고 각각에 대해서 우리가 엑셈플도 봤었었죠. 다른 코드를 가지고 이 세 가지에 대해서 플러쉉이라는 컨셉을 이야기했었고요. 예제를 보면서 이 세 가지를 필요하다고 합니다.
스트림의 어퍼링 타입은 setVub나 setBub에 의해서 바꿔질 수도 있다. 라고 말씀을 드렸었습니다. 그 다음에 파일 이야기를 했습니다. 왜냐하면 io 중에는 device io도 있지만, file io. os가 모든 걸 파일로 간주해서 그 파일에 대한, 즉 메모기에 갖다 넣고 그 다음에 하는 어떤 대상 중에 하나는 파일을 이야기하니까요. device to file, network to file이고, 파일이라는 게 뭐냐 라는 이야기를 먼저 했었습니다. 그 다음에 이 부분은 internal array라고 해야겠고, Linux 입장에서는 저렇게 number of bytes, sequence로 쭉 놓는 것이다. 그리고 wdd all i device도 파일로,
모델링해서 그만큼 컨셉적으로 굉장히 쉬운 그런 부분을 갖게 된 과정이 있습니다. 그러면 그 파일들을 구분을 해야 될 텐데 그때 사용하는 마커, 파일을 대상으로 우리가 이게 파일이라는 게 스트림, 스트림 바이스를 우리가 읽고 쓰는 거니까
이동시키는 것인가 위치를 차킹하기 위한 수단으로 파일 포인터라는 걸 이야기를 했었고요. 그때 사용되는 중요한 스태프의 명령어가 F-seek, F-seek이 있었습니다. F-seek 같은 경우에는 예제로 줬었어요. 형식이 있고 F-seek 명령어를 썼을 때 어떤 예절기가 발생하는지 그런 부분들이 있습니다.
설명드렸습니다. 그런 부분들도 그냥 슛 넘기지 마시고 실제 여러분들이 명령어를 써서 실행했을 때 어떤 일이 일어나는지 그런 부분들도 이해하실 수 있습니다. 그 다음에 이제 디바이스 I/O 이야기를 했습니다. 여기서 이제 디바이스 드라이버 이야기를 하기 위해서 디바이스 I/O에 대한 이야기를 했던 것
이라는 가을에 있죠. device driver 같은 경우에 이 주제는 사실은 저희가 좀 색다른 방식으로 제가 설명을 이기기 보다는 여러분들이 팀으로 서로 팀장에 의해 찾아가면서 했던 그런 이야기입니다. device driver를 이야기할 때 또 i/o 컨트롤이라고 하는 시스템 별 명령어가 어떤 역할을 하는지. 그쵸? 주요한 역할은 어떤 유저가, 애프터케이션이 device driver에게 뭔가 arbitrary action 정해져 있는 게 아니라 애플리티 라이브 라이브 이런 것처럼 미니 공엣이 다 정해져 있는 그런 것뿐이 아니라 뭔가 다른 어떤 액션을 좀 시키고 싶을 때
폼을 활용하고 싶을 때 사용할 수 있는 스태프 볼 명령이 다이오 컨트롤 이런 말씀을 드렸었습니다. 이것의 장점은 이런 일정인데 이게 또 단점, 조심해야 되겠죠? 그런 부분들도 있었다는 것도 말씀드렸었죠.
그럼 이정도가 이제 아이돌 매니지먼트 관점에서의 OS의 역할이라고 본다면 두번째는 이제 프로세스 매니지먼트 관점에서 OS의 중요한 역할 저는 프로세스 매니지먼트라고 하는건 프로세스를 크리에이션 또는 딜리션 그리고 서스텐딩 앤 리슨이 그리고 프로세스 싱크라이제이션 프로세스 하나가 아니니까 당연히 여러 프로세스들이 리소스를 동시에 쉐어링하고자 할 때 스케줄이 필요하고 싱크라이제이션이 필요했었습니다. 그리고 그들간의 커뮤니케이션 그리고 IPC. 이거는 못하네요.
슬라이드, 카페, 케이스, 이 부분은 사실 제가 요거를 남겨놨던 이유가 이제 프로세스 매니지먼트 아니면 트랙 매니지먼트 슬가다가 깜빡해 내요. 그러면 지금 제가. 그러면 우선 프로세스가 뭐냐 라고 하는 부분에 이해를 하고 들어가야 되다 보니까 프로세스 스테이트에 대한 이야기를 했습니다. 다섯 가지 스테이트. 어떤 프로세스든 어떤 한순간에는 다섯 가지 중에 하나의 스테이트를 갖게 된다. view, ready, running, waiting, and terminate. 그렇죠? 그리고 이러한 프로세스 스테이트를 포함해서 각 프로세스의 정보를 표현하는 데이타 구조과 tcb 혹은 pcb 라고 하는 형태에
이런 것도 진동했었습니다. 물론 깊이 들어가진 않았지만 어쨌든 이 프로세스를 구별하기 위한 정보를 데이터 스트럭처로 관리를 해야 되잖아요. 그래야 OS가 이 프로세스에 대한 구분을 하고 실행했다가 웨이킹 갔다가
뭐 이런 과정들을 트래킹할 수 있으니까요. Process Presentation 같은 것도 제약을 했었습니다. 그 다음에는 Process 일종의 Life Cycle의 관점에서 봤을 때 Creation, 그죠? 그래서 Parent과 Child Process의 관계, 우리가 얘기를 했고요.
또, 이닉 프로세스, 그리고 시스템 리 프로세스 같은 거죠. 같은 건데, 이게 모트, parent 프로세스의 역할을 한다. 라고 말씀을 드렸습니다. 그때 굉장히 유명한 시스템 폴, 포크 명령, 포크 시스템 폴. 이 새로운 프로세스를 만드는데, 이제 parent와
아이덴티컬한, 그렇죠? 그런 부분이다. 그리고 포크를 통해서 parent가 child를 만들면 시행 순서는 알 수 없다고 했었어요. 일반적으로 그렇죠? 물론 이거를 이제 뭔가 순서를 정해주기 위해서는 wait, system call이라든가
sleep 이라든가 이런 추가적인 걸 통해서 parent가 좀 기다리게 만든 혹은 child가 기다리게 만든 뭔가 그런 어떤 수단을 쓰지 않으면 사실은 혹 명령 자체는 누가 parent, child 누가 먼저 실행할지 우리가 알 수는 없다. 여기서 또 중요한 게 이제 아이덴티파이어로 parent와 child process을 구분을 하죠. 감사합니다.
포크 명령을 했을 때 턴델 값에 의해서 parent인지 try인지 이렇게 썼습니다. 여기 갑자기 퀴즈라고 해서 왜냐하면 제가 이 포크를 가지고 만약에 만약에 여러분들에게 실효 문제를 낸다 라고 하면 이런 형태로 낼 거다 그런 걸 힌트를 드리는 게 좋을 것 같아서 예를 들면 이 간단한 코드가 있을 때 그리고 포크가 쓰여져 있잖아요 이랬을 때
A를 프린트하고 B를 프린트하게 만듭니다. 그러면 A와 B는 몇 번의 프린트가 되겠느냐 라는 문제를 낼 수 있겠죠. 낼 수가 있겠죠가 아니라 이 낸 게다. 다 보여드리는 거예요. 이 정도 여러분이 이해하셔야
푸시면 좋겠다는 거고요. 여러분 이렇게 되죠? 문제를 풀 때 보면 parent가 있고 try가 있죠? 그러면 그 과정을 따라서 해보면 정답은 A2번, B3번 이렇게 찍게 됩니다.
그래서 A는 기존 차일드와 차일드의 차일드가 실행되고 B는 모든 살아있는 프로세스가 실행을 하게 됩니다. 그렇죠? 이런 식의 문제. 여러분들한테 질문을 할 수 있는 것 같다. 라고 하는 거예요. 물론 실제 많이 문제를 낸다면 이거는 조금 복잡하게 되겠죠?
그래야 문제력이 조금씩 생깁니다. 이해해주시고요. 장난치려고 하는 건 아니고 모든 각점에서 모든 문제는 구성이 된다. 이렇게 보시면 돼요. 그 다음 두 번째는 터미네이션입니다. 터미네이션을 포크로 했고 순서를 해주기 위해서 웨이트 같은 스템폴 명령을 쓴다는 이야기를 드렸는데 터미네이션.
그죠? 일생이 다 되면 이 state 중에 tabulated state이 있잖아요. exit system call을 통해서 하게 되고 exit을 하게 되면 state value를 return한다. waiting parent process에게 그죠? waiting parent process에게
리턴하는 과정을 붙게 되고 경우에 따라서는 OS가 일관적으로 삭제하기도 하긴 합니다. 어쨌든 다시 한번 트라이브 프로세스 같은 경우에는 트라이브 프로세스가 끝날 일을 웨잇 시스템 포어를 통해서 또 투기를 한다. 웨잇이 반드시
뭔가 기다리는 역할 뿐이 아니고 터미네이션을 위해서도 쓰인다. 이게 잘못되면 정상적으로 되지 않으면 좀비 프로세스와 오픈 프로세스라고 하는 게 쓰일 수 있다는 것을 말씀드려도 좋겠죠. 좀비와 오픈 구분하실 수 있어야 되겠죠. 좀비라고 하던 트라이드는 이미 터미네이션을
되는데 그걸 기다리고 있는 파인트는 여전히 alive 하고 있는 그런 것을 우리가 준비하고, 이건 조금 더 프로그램이 있다, 문제가 있다 라고 하는 것이고, 왜냐하면 이런 process table entry를 차지하고 있는다든가 이런 어떤 문제점을 야기하기 때문에 orphan process도 문제지만 얘는 사실은 그렇게까지 크게 문제가 아닌 게 일괄적으로 얘는
없애버릴 수 있기 때문에 그렇습니다. often 같은 경우에는 child가 원인하고 있는데 parent가 된 상태로 들어가는 거라고 볼 수가 있습니다. 그래서 parent가 통일에 있다. child는 아직 원인하고 있는데 그래서 이것도 조금 더 여러분들한테 코드으로 좀 보여드리기 좋을 것 같아서 종기 프로세스와 오픈 프로세스의 케이스를 코드 형태로 넣어놨어요.
어렵지 않으실 겁니다. 지금 parent이고요. child인 상태에서 그러면 parent가 지금 기다리고 있죠. 10초 동안 sleep하고 있는데 그 사이에 child가 먼저 엑셀 죽어버린 거예요. 그러면 child가 죽어버렸죠.
그럼 저러면 좀비가 되어 있다 라고 할 수가 있고 반면에 All Front 같은 경우에는 반대로 Parent가 먼저 돌아가시는 거죠 Trial가 슬프를 하는 동안 이것땐 All Front Assess가 만들어진다
이건 이제, 얽지 않은 거니까 보시면 좋을 것 같아요. 그래서 Child, Non-Deprocess과 Open Process가 이게 정상적으로 Parent과 Child가 잘 편드니까 생기지 않는데, 이제 돈이 좀 잘못됐을 때 문제가 생길 수 있다. 이 중에서 조금 더 심각한 건 Non-Deprocess입니다.
다음은 process scheduling이죠. 우선 scheduler라고 하는게 available process를 실행하기 위해서 선택해야 되기 때문에 그렇고 이때 이제 우리가 context niche라고 하는 이 오버렛, 이 문제를 어떻게 해결할 거냐라고 하는게
중요한 스케줄링에 있어서의 이슈라고 말씀 드렸습니다. 자, 두 번째 의미를 나와 있고요. 컨텍스 위치라고 하는 건 프로세스 스케줄링과 연관된 내용이고 스위칭을 잘 하지 않으면, 이 CPU 입장에서 보면
비지 웨이킹처럼, I/O 때문에 발생했는 게, 스케줄링을 하는 것 때문에 컨텍스 위치한다는 것을 실행하고 있던 프로세스의 모든 정보, 아까 PCB, 그 정보를 다 저장했다가, 메모리 저장했다가 다시 불러오고 이런 과정들을 거쳐야 되기 때문에 그냥 그렇게 간단한 문제가 아니라고 하는 거예요. 마치 여러분들이 한 가지 일을 하다가 또 다른 일을 하려고 하면 뭔가 이거를 한 쪽으로 놓고 다른 거를 갖고 와서 하고 이거를 해야 되는 그런 로봇이 있는 것이라면요.
그래서 이게 싫다고 또 한 번 실행하고 있는 걸 계속하게 되면 정말 중요한데 실행이 늦게 되거나 그거 못 되는 그런 문제가 있을 수 있잖아요. 컨택스위치가 그만큼 중요하다. 그 다음에 또 하나는 이제 프레이드 위어죠. 프로세스 데이에서 우리가 실행 단위 있고
지금의 OS은 거의 트레드 개념, 트레드 매니지먼트 그러면 트레드 같은 경우에 다른 트레드와 공유하는 데이터가 뭐고 독립적으로 가지고 있는 데이터, 그 스트로트가 뭔지 이런 부분들, 그리기, 그죠? 코드나 인스타가 많이 모르는 거지만
우입적인, 우입된 실행, 아니에요. 근데 공유하고 있는 것도 없는 그런 개념이 프레드였고요. 프레드에서 우리가 중요하게 이야기했던 이슈은 그것도 스케줄이 있었습니다.
이 경우에는 어 생크라니지이션이 중요하다 이게 잘못됐을 때 레이스 컨디션이 강할 수 있고 레이스 컨디션은 반드시 방지를 해야 된다 방지하는 방법으로 크게 두 가지가 있는데 뉴 텍스를 쓰는 방법 그 다음에 non-preemptive 커널로 디자인하는 방법 non-preemptive 커널로는 어떤 퍼센트나 트렐들이 커널로 동작하고 있을 때 그게 빠져나오기 전까지는 그대로 건드리지 않는 것 그게 non-preemptive 커널로 있습니다
그걸 우리가 non-preemptive 터널이라고 한다. 한번 실행, 러닝 상태에 있는 프로세스는, 통은 thread는 끝내고 나올 때까지는 고장해주는, 그거를 보면 반대는 이제 preemptive 터널이었습니다. 이 두 가지가 이제 장단점이 있었어요. 그쵸? real-time 관점, 그 다음에 고장해주는 관점, 이런 부분에서 좀 장단점이 있었다. 그래서 간단하게 두 가지를 비교해보는 그런 내용도 있습니다.
그 다음에는 이제 ipc 주제도 넘어갔었죠. 그리고 os의 코어 펑션 중에 네트워크 혹은 프로세스, 인터 프로세스 커뮤니케이션으로 관련된 부분이었습니다. 데이터를 공유하면서 작업을 해야 되니까. 그리고 이때 이제 강조했던게 크게 보면 디바지 타입이 있다. 쉘페모리 모델이 있고 메시지 탄생 모델이 있었죠.
두 가지 방식으로 다 우리가 IPC를 구현할 수 있는데 그 각의 방식, 그리고 정단점을 이야기 했었습니다. 그 다음에 그 외에 또 승낙이 있었죠. 승낙. 이것도 또 IPC 인터넷에 하나가 발생했을 때 소프트 인테리어 이렇게 이야기를 했고요. 그리고 파이프.
아이구에서의 방향성과 관련된 스트림의 방향성을 바꾸는 거로도 되지만 결국 그 주체가 컨셉이기 때문에 이것도 ipc로 간주된다 라고 했었습니다. 그래서 order 파이프와 name 파이프까지 어떤 차이점이 있는지 그런 부분도 공부를 해주셔야 되겠죠.
마지막 서버제도 네트워킹과 관련해 리모트에 존재할 때 그래서 일반적으로 사용하는 클라이언 서버 모델을 가지고 프로듀서의 컨슨어 모델을 가지고 네트워크에 대한 이야기를 했습니다. 네트워크 파트에서 그러면 데이터를 어떻게 하면
한정적으로 전송할 거냐 라고 하는 그 일을 담당하는 OS 파트포인트는 앱톡 클래스에서 소식간에 듣는 거고 시스템 분배 입장에서는 소켓이라고 하는 인터페이스 그리고 소켓을 클라이언트와 서버가
그걸 만들고 실제 인사를 주고받고 클론스하는 단계까지 사용되는 몇 가지의 시스템 폴리 명령어들이 있었어요. 그런 부분들을 자연스럽게 따라오게 되었죠. 그다음에는 RPC, stop 이라고 하는 일종의 proxy 이를 두고 프로세스, user process 입장에서는 실제 이 답을 줄
상대방이 지금 리모트에 있다는 걸 못 느끼게 만들어주는 그런 기능이 RPC라고 있었습니다. 그래서 스톱도 클라이언 스톱이 있고 서버식에 존재하는 스톱, 팍스가 있어서 얘네 두의 마셔링, 언 마셔링이라는 개념도 패킹하고 언 패킹하고 이런 작업들을 해줘야 된다라는 말씀을 드렸었으면 좋죠. 그리고 RPC에 대한 부분도
깊이 있게 아실 필요가 없지만 강의 자료에 넣은 정도는 알아주실 필요가 있겠다는 겁니다. 자 여기까지 일단 쭉 한번 리뷰를 했고요. 이런 내용들을 중심으로 잘 준비하시면 충분히 좋은 마무리 하실 수 있을 겁니다. 취업범위는 지금 제가 앞에서 쭉 얘기했던 것처럼 골고루 출제할 거고요.
출제하는 방식도 중간고사 때 비슷하다고 했습니다. OX 프로포스 문제도 있고요. 단답형으로 답하는 것도 있고 또 객관식으로 사치선다형으로 맞는 것, 틀린 것, 놓는 것 간단한 코드를 주고 아까 제가 예제를 보여드리고 있어요.
실행 결과를 써가라. 그리고 말씀드렸던 지금 여러분의 내일 마무리되는 과제와 관련된 문제 실제 여러분들 직접 하셨는지 확인하는 따지해서 문제가 출제될 거니까
한 가지는 제가 조금 질다가도 써 놓을 건데 이번에는 풀폴스 같은 경우에는 정답을 맞으면 1점이고요. 틀리면 -2점. 답을 안 쓰면 0점.
찍지 말라는 거예요. 알면 쓰고 모르면 그냥 주문이 되는 게 여러분들에게 실질적으로 낫다. 지난 번에 찍은 생각이 많은 것 같아서 방식하는 시간에 주문해 주는 것 같아요. 그래서 요행을 바라지 마자.
물론 찍어서 맞은 기분이 좋다는 건 나도 알아요. 근데 공부에서 맞은 사람 입장에서는 좀 억울하잖아. 그렇지? 그래서 잘 보시고 정답을 알면 당연히 써야죠. 그것만 약간 달라지고 나머지는 크게 달라지는 건 없을 것 같아요.
비슷한 유형으로 오늘 제가 서머리 해야 되는데 오늘 중심으로 공부하시면 좋겠다 본막 나머지 원래 제가 오늘 하고 싶었던 것들에 대해서는
관심있는 학생들, 연락 기다리고 있을 테니까 연락 주시면 랩에서 후보인 분들께 설명을 드릴 수 있도록 또 대학원생들도 많이 있으니까요. 저한테 직접 오는 게 좀 부담스럽다 하는 학생들이 있으면 대학원생
그리고 인턴이 있습니다. 지금 2명이 없고 인턴이 있으니까요. 그리고 마지막으로는 다음 학기에 열리는 기능형 사물인터넷 과목. 간단하게만 저 혼자 하는 과목이 아니고요. 능강으로 개설이 됩니다.
우리 소티학과에 마이크로 전공이 있죠. 사물인터넷 마이크로 전공, IoT 마이크로 전공이 있는데 그 전공의 과목 중에 하나고요. 지금 프랑스에 있는 교수님하고 문관으로 하게 됩니다. 프랑스에 있는 교수님이 강의를 하실 때는 온라인으로 진행을 할 거고요. 제가 강의를 할 때는 학점을 조금 나눠서 제가 강의를 할 때는 오프라인으로 강의를 하는 거예요. 온업 병행하는 과목.
당연히 지능형 사물인터넷 기능이니까 사물인터넷이라는 게 그 사물에 대한 정보를 인지하고요. Perception, 그건 Sensing이라고 하죠. 그리고 그 정보를 다양한 인터넷 기술, 우선 우선 인터넷 기술을 통해서 서버나 혹은 그 정보를 필요로 하는 데이터 센터에 저장을 해놓고 그 데이터를 관리하면서 AI도 학습하고 해서 패턴을 차단하는 거죠.
수익하는 데이터로부터 파터를 찾아내고 혹은 예측을 하고 그래서 뭔가 서비스를 제공합니다. 이 서비스를 제공하는 쪽이 액션이 강조가 되면 그게 사실 physical AI가 되는 겁니다. 사모인터넷에서의 AI에서 더 나아가서 이제 액션, 원래 사모인터넷에서 사실은 당연히 뭔가를 예측하고 하면 터를 줘야죠. 유저가 원하는 서비스를 제공을 하는데 그 파트가 조금 더 액션에 강조되고
그 주체가 뭔가 로봇이 되거나 자율주행 자동차가 되면 그런 관점에서 우리가 게시판에 대한 이야기를 하는 거잖아요. 그런 내용들을 전반적으로 다루게 될 겁니다. 다만 실습이 없는 이론 과목이기 때문에 전반적인 그런 개념, 최근에 이슈, 이런 분들 그리고 또 최근에 이슈가 되고 있는 논른들 그런 분들을 같이 보면서 아이디어 제너레이션을 해보고 구현까지는 못 가겠지만 아이디어를 제너레이션하고 이 아이디어를 내가 구현하는 과정에서 어떤 것들을 고려해야 되는지 그런 부분들까지
는 해보는 아이디어 차원에서 실제 이제 그 그러니까 쉽게 얘기하면 레시피를 만들어 보는 거죠. 레시피를 가지고 실제 이제 요리를 하는 거 거까지는 못합니다. 거까지는 못하지만 레시피를 만들어 보는 거까지는 한다. 보시면 되겠습니다. 윤광이기 때문에 아마 이 준비에 한 번
3시간 돌아서 하는 형태로 진행이 될 거예요. 아무래도 시간은 프랑스하고 시차가 있기 때문에 조금 FG 교시 보태를 4시 반에서 11시까지 한꺼번에 열리는 시간을 2년 전에 한번 개설했었고요. 이번에 다시 한번 개서를 하게 됩니다. 방학 동안 조금 더 우리가
최근의 이슈를 어떻게 반영할 건지 고민하는 분들이 있을 텐데 아마 4학년 선택과목으로는 재미있는 방법이 될 테니까 관심 있는 학생들과 마음껏 반영하십시오. 자 그러면 오늘은 여기까지 마무리하고 지난 시간에 인사는 다 없지만 진짜로 유종인 일은 잘 보시고 앞으로 여러분 다음 학기 또 조언해 주시고 그리고 이북까지 어디서 저를 만나느라고
반갑게. 저 원래 졸업하면 다 깎는 거예요.