운영체제 6.1
Shared on June 1, 2026
상소하고, 상소하고, 뭐, 그동안 들어본 적 없는 내용들을 좀 할건데, 약간 뼈를 좋아해요. 좀 하대적인 이야기도 좀 나오고. 자, 그래서 하대 같은 좀, 잘 못해. 노랄이 같은 거. 여러분 회사 사무회사는 가을 줄 모르니까, 내일은 답변하면 좋겠지? 자, 이 무차처럼,
아이오 시스템에 대해서 이야기할거에요. 그러니까 디바이스, 아이오 디바이스, 디바이스 드라이버, 아이오 서비스 시스템이 살짝 이야기할건데 자 이게 지금 우리가 보면, 우리는 할 시스템하고 도체 메모리가 왜 왔지 그 밑에 아이오 서비스 시스템이라는 5줄이 있어요. 그 밑에 디바지 드라이버 있고, 디바지 드라이버 안에
인터넷으로 처리하는 핸들러 있어요. 그 밑에 아이오 디바이스 있고 이 아이오 서비스 시스템의 역할은 뭐냐면 앱 개발자뿐만 아니라 이제 큰 앱에서 디바이스 드라이버의 아주 구체적인 정보를 숨켜서 쉽게 이제 이 디바이스를 접근할 수 있도록 해주는 목적이에요. 자 그래서 보면 이제
CET 개발자, CET 프로그램이 하는 개발자는 Open, Close, Leader, Light 이런 함수를 통해서 동일한 인터페이스, 이런 인터페이스 통해서 디바이스를 접근한다. 디바이스 타입이 키보드든 아니면 디스크든 아니면 USB 메모드든 서로 다른 종류의 디바이스 또는 제조소가 다른 디바이스들에 대해서 동일한 인터페이스로 유니폼,
유니폼이요 유니폼 어세스 메소드 그러니까 동일한 접근 메소드 함수들입니다. 함수들을 통해서 접근할 수 있도록 해준다. 만약에 디바이스 종류가 다르다 그리고 회사마다 디바이스가 다르다 그럴 때마다 인터페이스를 서로 다른 디바이스 사용하게 되면 개발자가 되게 힘들겠죠. 또 그리고 여기 보는 것처럼 OS 내에서도 사로 디바이스 다른 디바이스 제조사 다른 디바이스
디바이스가 들어올 때마다 OSNM 파인템이라든지 버츠메버리에서 아이오 할 때마다 매번 서로 다른 인터페이스를 사용하게 하면 OSNM을 뜯어 놓쳐야 됩니다. 그러니까 호환성이 없어져요. 그래서 아이오 수프 시스템은 밑에 디바이스 종류 그리고 회사에 관계없이 동그란 인터페이스로 접근하도록 해준다. 그게 아이오 수프 시스템의 첫 번째 가장 중요한 목적이에요. 이렇게 해야 하면 약간
이 그림을 보여드릴게요. 다음 그림. 얘는 '믹스'에 대해서 얘기하는데, 여러분들, 'Vurual File System'이라는 인터페이스가 보았죠? 이제 'Vurual VFS'를 통해서, 그러니까, 우리가 이야기했을 때는 서로 다른 파티션에 있는 파일, 그리고 서로 다른 파일 시스템에 대한 파일에 대해서
그 앱에서 동일한 인터페이스 있죠. 리더면 리더, 오프이면 오픈은 그리고 라이트는 라이트 그러니까 그런 동일한 인터페이스 통해서 서로 다른 파티션을 전제하는 파일드 접근할 수 있고 서로 다른 파티션을 전제하는 파일드 접근할 수 있도록 해주죠. 그렇죠. 자 이게 VFS에요. 그래서 VFS 안에 보면 iNode, iNode가 있어요. iNode 밑에 보면 뭐 있죠? 안에 보면 FOPS라고 있어요. 이 OPS 안에서 각 파일 시스템에서 구현된 이제
오픈에 대한 기능함수, 리더에 대한 기능함수, 라이트에 대한 기능함수들이 각 파일템별로 구인되어 있지 걔네들은 BOPPSI 안에 있는 비어있는 함수 포인트다 기억나지? 다시 한 번 이만 되실까요? 혹시나
여기 아까 전에, FOPs, VFOSP라는 구조체입니다. 이 안에 보면 이런 함수 포인트들이 적혀있어요. C++의 멤버평신처럼, 비어있는 함수, 비어있는 구조체가 이런 대로 딱, 비어있는 함수들이에요. 함수 포인트만 적혀있는 구조체.
각 파시템에 구현된 오픈, 클로즈, 리더 라이트에 대한 여러 가지들이 여기에 함수 포인트로 연결해 주면 해당하는 파시템에 함수가 호출이 됩니다. 이게 뭐냐면
애플로어ps의 포인트 안에 리드라는 함수가 있어요. 그 리드 함수 안에 각각의 파일 시스템이랑 리드 함수들이 이렇게 여겨내네요. 그 밑에 뭐든지 하면, 이 밑에 이 그림이 약간 되어있는데 IOS 시스템하고 이 사이에 파일 시스템이 존재한다고 하더라고요. 이 그림이 약간 빠졌네요. VFS하고 IOS 사이에 파일 시스템이
파일 시스템이 추가되어야지 자, IOS 시스템 아래에도 마찬가지로 파일 어플레이션 구조체가 있고 그 안에 보면 Open Leader Light IoT라는 이런 비어있는 구조체가 생기지 자, 그래서 여기 보면 디바이드라고 있어요 여기는 IOS 시스템이고 이런 형태의 구조체가 있고 디바이드라이브 내보면
키보드로 가져갑시다. 키보드도, 키보드 드라이브가 존재하게 되는데 키보드 드라이브가 뭐였어요? ATK, BD, OPEN, READ, LIGHT, ION, CT라는 이런 함수들이 키보드 디바이드라이브 안에 구인되어 있어야겠지 디바이브 드라이브는 개발자가 자기 나름대로 일어 올려놓도록 정해서 할 수 있어야겠지. 개발자가 뭐만 아니라 회사마다 다른 디바프트라버가 존재할 수 있겠죠 이름이 다를 수 있어요
자 그럼 나중에 이렇게 나눠 이제 디바트 라이브 개발자는 이제 이 디바트 라이브를 이제 오유산으로 넣어서 구동시키고 싶으면 여기 보면 파일 오프서랑 비슷하게 보면 오픈 리더 라이트 이런 함수에 각각 함수 포인트에 자기가 개발한 함수를 연결시킵니다. 함수 포인트에 이 함수 이름을 저장하면 되요.
그래서 뭐냐면, FileOPS라는 I/O 시스템이 정리한 틀이에요. 그냥 함수 포인트만 있고, 내용 없게 된다. 앞쪽에 봤던 VFS에 함수 있죠? 그처럼 함수 포인트만 전쟁이다. 그래서 키보드 드라이버 개발자는 자기가 만든 이런 함수들을 Open Lead Right Closer에 연결시켜주면 된다.
자 그래서 나중에 여러분들 뭐에요? 이제 키보드에서 데이터가 있겠지? SCANF 같은 걸 함수 하죠? SCANF에서는 이제 리드 시스템콜을 사용하게 돼요 리드 시스템콜을 통해서 이제 키보드에서 키를 끄고 오겠지? 자 그때 이제 리드 함수는 리드 함수로 처리하면 VFS 통해서 iOS 유스템을 거쳐서 VFS에 있는 점 리드 함수로 처리하겠지? 점 리드 함수로 처리하면 어떻게 키보드에 대한 요
tkbd라는 리드라는 함수가 자동으로 호시되어야지 그렇죠
자, 이게 디바인트라이브의 실제는 이렇다. 이렇게, 요거를 카메라에 등록을 한 방법은 각각의 개발자가 짠 이 함수들을 오픈, 리더, 라이트에 해당하는 부분에 연결을 시켜주어야 된다. 함수 포인트를 제작해 주어야 된다. 자, 그러니까 어떻게 해야죠? 이 그림을 보면 결국에는 위에서 어떤 리더, 라이트 함수를 호출하든 관계없이 어떤 종류의 디바이스도 짓가락수 있어야.
어떤 용류의 디바이스를 접근할 수 있어요? 그러니까 키보드, 디스크, 그러니까 관계없이 인사하고서만 사용하게 되면 서로 다른 디바이스를 접근할 수 있다, 그렇잖아요? 그러니까 예를 들어서 디스크에 대해서는 어떻게? 얘는 디스크에 대한 디바트 라이브, 오픈, 미드, 라이터 이런 함수들이 구현되어 있겠죠, 그렇지? 구현되어 있어요. 자, 이는 티로 된다. 자, 그래서 다시 가면
자, exception 인터략터, 이거 우리 자주 해야겠지, 그치? 인터략터는 이제, 예부의 디바이스가, 그러니까 CPU에게, CPU에게, CPU에게, CPU에게 전달하는 이벤트, 이벤트. 그렇죠? 인터략터. 자, 이 셰션은, 이 셰션이 뭐라고 그랬죠?
실행 파일을 몇 명을 실행할 때 발생한 이벤트 CPU 내부에서 발생한 이벤트야 CPU에 몇 명을 실행하다 CPU 내에서 발생한 이벤트가 입섭션이에요 그래서 입섭션은 페이지포트 입섭션 메모리 접근 몇 명을 실행하다가 발생한 이벤트가 페이지포트 입섭션이고 예를 들면, 영어를 나누었다. 그 전에 가볍게 영어를 나누었을 때 발생한 이벤트
일반적으로 경고를 보고 있었던 데 저는 메시지가 보통 이벤트가 있었잖아요 그래서 보면 우리가 가시는 것은 인트라터였죠 인트라터의 역할은 뭐냐면 첫 번째는 하드웨어 컨크런시를 위한 겁니다 하드웨어 컨크런시, 컨크런시가 병행성에 있지 병행성, 패러들이지 그러니까 CPU하고 디바이스가
별도의 디바이스죠. 그치? 별도의 디바이스예요. 그러니까 CPU하고 디바이스가 동일한 시간대에서 동시에 하고 만들기 위해서 만들어진 게 이제 큰 클래식입니다. 큰 클래식. 자, 이제 첫 번째. 첫 번째. 큰 클래식. 원인 보기 때문에. 자, 보면. 하드웨어는 능력보려 이음처럼 하드웨어는
디바이스는 자신만의 디바이스를 구동하겠지? 구동한다. 이제 cpu 변형으로 구동하는데 이때 구동하는 이유는 뭐냐 하면 cpu가 디바이스한테 명령을 내리게 된다. 자 그래서
그러면은 그냥 몇 밀리 색깔이 걸려요. 근데 CPU 입장에서는 인기 센트가 아주 긴 시간이네요. 그러면 현재 P1을 PS1에서 센터 100번이 달라고 요청을 하면 돼요. 그러면 센터 100번이 1캐실 때까지 어떻게 무작정 기다릴 수 있겠지? 무작정 기다렸으니까 스케줄이 되갑니다. 피트로
필터를 실행하게 되는 거지. 필터를 실행해야겠다. 자, 필터를 실행하면 CPU는 러닝한 거지. 러닝. 러닝. 러닝하는데요. 자, 그리고 아까 전에 세타 100번인 거다라는 요청을 받았으면 디스크는 어떻게 해야겠다. 세타 10번을 읽기 위해서 구동되기 전에 디스크도 러닝하는데요. 그치? 그러니까 내부적으로 필요하고 있다. 그치? 자, 그럼 어떻게 해야죠? 스피어도 러닝. 그리고 디스크어도 러닝. 그치? 그치? 동시에 들어가고 있어요. 이게 하드웨어, 컨크레이션이다. 그치?
자 그러면 나중에 디스크가 3-100번을 익히면 완료했지? 완료했으면 완료했다는 것을 알림 목적으로 뭘? 디스크는 인터렉터를 보내고 있지? 아니 노틴가 있지 노틴 노피피케이션이 있지
자, 그래서 이렇게 보면은 뭐 있어요? 자, 인터렉터는 notification을 지원하기 위해서 해야 된다. 그렇지? 자, notification 없다면 어떻게? 그러니까 인터렉터가 없다면 지원되지 않는다는 거 어떻게 되죠? CPU는 그러니까 무작정 디스크에서 작업이 완료때까지 기다려야 되겠죠. 그렇지? 기다려야 돼요. 자, 인터렉터가 있기 때문에 알림이 있기 때문에 이제 CPU는 자기만의 동작을 계속 수행할 수 있다겠지
인터넷에 와서 말하자면 cpu는 극이 증의된 작업을 시작하고 있기 때문입니다. 인터넷에 이유가 이런거죠. notification. 그리고 두번째는 뭐냐면 두번째는 외부 디바이스가 cpu한테 서비스를 요청한다고 하는지 요청. 일본어 cpu가 디바이스에게 명령을 내리고
두번째는 디바이스가 CP에게 서비스 요청을 한다고 했지? 반대방향입니다. 키보드가 있습니다. 키보드가 있는데 여기서 키를 눌러서야겠지? 키를 딱 눌러서요. 키를 눌러서는 키보드는 CP한테 내가 택징한 키가 늘렸으니까 처리해달라고 요청을 보내야 되겠지?
요청에 보내는 알림으로 인테라이터가 상해달라고 보이지? 여기서 인테라이터의 관계는 서비스 요청
만약에 두 번째 방법이 없으면 어떻게 되겠죠? 무작 키보드가 예를 들면 스칼에프예요. 스칼에프를 하게 되면 CPU는 키보드에서 데이터가 들어올 때까지 계속 기다릴 수밖에 없어요. 한 시간 기다리든지 그러니까 25시간 기다리든지 계속 기다릴 수밖에 없는 거지. 인터넷이 없다면 CPU가 다른 동작과 다른 프로세스를 실행 못한다고 해야 되겠지?
다른 프로젝트 실행 못하게 돼요. 자, 그러니까 이제 어떻게 이제 CPU는 계속 러닝하고 있고 그리고 디바이스도 그러니까 키보드를 쓸 때 러닝하는 거겠지. 자, 그래서 CPU하고 키보드를 동시에 분리 목적으로 그러니까 두 번째 인테리프트가 목적 기능에 인테리프트가 필요하다고 얘기했지. 자, 결국은 CPU가 그러니까 디바이스에 바이러지 않고 그러니까 계속 실행할 수 있도록 해주는 게 이게 인터 대목적이에요. 그렇지.
자 여기 보면 내가 이야기했던 겁니다. 자, 이래서 보면 인터락터가 뭔지 보도록 해요. 자, 우리가 보면 이제, 여러분들이 메인보드에 보면 이런 게 있어요. Programable Interrupter Controller. 그러니까 피하시라는 게 메인보드 상에 박혀서, 그치? 자, 그러니까 모든 디바이스들은, 디바이스들은,
이제 트리트해보죠.
이제 당연하게 cpu와 연결이 될, 아 모든 디바이스들은 이제 여러 개의 선이 된다 디바이스에서 나오는 여러 개의 선이 있겠지 데이터들이 나오는 선이 있지, 맞죠 핀들, 다 알겠죠 핀이 유사하지만 디바이스에 있는 데이터가 cpu로 전달이 됐을 것이지 핀중에 하나가 뭐냐면, 핀중에 하나가 뭐냐면 인트랍터 전기적 신호를 내보내는 핀이 하나 있어요 핀이 뭐냐면 인트랍터 리큐렉터 라인 하나가 있어요
각 디바이스에 있는 핀이 존재하는데, 핀이 인터넥터 리켓 라인, IIQ 라인이 존재합니다. I-IQ 라인이 PIC로 연결됩니다. 에어백도 있고, 브레이크 센스도 있고, 연료 센스도 있고, 클럽 같은 디바이스가 있겠죠. 각각의 라인이 있는데, 그중에 한 라인이 인터넥터 IIQ가 PIC로 연결됩니다.
피아시는 뭐냐면 여러 디바이스에 나오는 인터럽트를 관리, 감독해주는 관리자가 된다는 거죠.
그래서 이 그림을 보면 PRC가 있고 CPU가 있어요 그래서 여기 중요한 게 보면 PRC의 역할은 뭐냐 뭐냐 하면 PRC로 여러 개의 인트랩터가 들어올 수 있어요 여러 디바이스에서부터 인트랩터가 들어올 수 있는데 각각의 여러 인트랩터 중에 보면 아주 중요한 인트랩터가 있고 덜 중요한 인트랩터가 있어요 그러니까 여러 개의 인트랩터와 동시에 들어올 때 이제 인트랩터의 전달을 순수화시켜주는 역할이라는 게 PRC의 역할이에요
순수화가 중요도에 따라서 우선순위에 따라서 순수화 시켜서 치프의 내용을 전달해 주는 역할이라는 게 피하시다. 알겠지? 그 이야기입니다. 그러니까 이게 보면 어떤 시간에 동시에 여러 개의 디바이스에서 인터넷터들이 한 번에 들어오셨다. 인테리어 탄 정기적 실험이다 디바이스에서 피한식으로 전달되는 정기적 실험인데
그래서 이런 명실을 중요성에 따라서 수소화 시킨 다음에 CPR로 된다는 게 PRC의 위칼이다. 실제로 보면, 우리가 이제 이런 데 메인보드에 보면 ADVANCED PRC가 메인보드 상에 박혀있고 대체형 이런 형태로 분류했어요. 보면 칩이 이렇게 똑같은 칩이 이렇게 두 개로 Cascade, 그러니까 지중량 형태로 연계되고
아이쿠은 핀에 PCI 보면 0번, 2번에 번호가 짜밀어져 있죠. 번호가 낮은 순위에 물려있는 인터랙터가 우선선이가 더 밝아지. 낮은 순위에 핀에 번호가 붙여있는 인터랙터가 우선선이가 높다. 그러니까 아이쿠은 0번이 인터랙터 우선선이가 가장 밝아지. 그리고 키보드, 그 다음에 인터넷은 각각 디바이스에
중료되어 따라서 이 핀에 물리게 된다. 메인모드 세계 회사에서는 각각의 규정, 규정에 따라서 디바이스의 종류별로 우선순위, 중료된 우선순위가 매겨진 규정을 보고 이 PIC에 각각의 대바이스의 인터렉터, 라인을 물리게 된다. 물러서 물리도록 세계를 하겠지.
한 번 더 드릴게요.
자 이거는 뭐 이 부분을 좀 잠시 좀 뜯으면 할까요?
자, 그래서 인터랙터가, 그러니까 디바이스가 인터랙터로 발생해 주셨다. 그러면, 아, 되시겠다. 그러면, 피할수로 인터랙터가 젠타가 되겠지? 젠타가 되요. 젠타가 되면 이제
내 짓을 합시다 이런 미약한 기억이 났는데
여기 보면 0번, 1번, 2번, 3번, 4번, 5번, 6번이 붙어있고 얘네들이 빗대입니다. 빗대 1번
자, 여기 보면 만약에 1번으로 인터넷으로 나왔어요. 1번으로 키보드에서 자, 인터넷으로 들어오면 1번으로 들어오세요. 자, 예를 들면 1번으로 표시하면 되겠지. 나머지 0이야.
그러면 여기 보면 얘를 마지막으로 앞으로 쓸게요. 비트의 비행이니까 백탈이 되어있죠. 이는 인테라프트 백탈입니다. 얘는 cpu로, 이번에도 cpu로.
여기서 설명하는 용어가 일반적으로 다른 책마다 다를 수 있어요 책마다 다를 수 있고 근데 하여튼 여기 있는 리스트 값이 그대로 아프 된다 여기서는 백태라고 말하고 있어요
자 그럼 나중에 저 CPU는 이제 인테리어트를 받았으면 인테리어트를 처리하고 나서 인테리어트를 처리하고 나서 보면 뭘 보냐냐면 액크를 보내게 되겠지. 액크를 안 했죠. 처리가 안 됐다. 액크를 보내게 되어야겠지. 그 해당하는 인테리어트는 처리가 됐다. 그러니까 피하시는 이해를 하게 되요.
그래서, 인트랙터의 종류는 마스크 벅 인트랙터하고 논 마스크 벅 인트랙터가 있어요. 마스크라는 말이, 옛날에 시스템 석터 배울 때, 마스크를 할 수 있다는 말은 마스크를 블록할 수 있다는 거죠. 처리를 인시 지연시키고 있다가 나중에 다시 처리한다.
이벤트 그런 시그널이라든지 인터넷트라 같은 것들이 손실이 되어서는 안 되는 중요한 이벤트이기 때문에 이제 없앨지는 없고 일시 처리를 지은한다. 그게 뭐냐면 마스크보라는 거지. 마스크보라는. 일시 시연시킬 수 있는 인터넷트를 보고 우리가 마스크보라는 인터넷트라. 그러니까 일시 시연시키다 말하면 불러. 마스크 한다. 나중에 이제 집중하시지. 네.
블록된 시그널을 Enable 시켜서 처리를 할 수 있다 디바이스의 경우는 대부분의 인터넥터는 마스크블 인터넥이기 때문이지 처리를 지연시킬 수 있다 대부분의 인터넥터는 마스크블이고 노 마스크는 뭐냐면 마스크를 블록할 수 없는 인터넥터가 존재하는데 그게 뭐냐면 우리가 파워! 파워! 오프있지?
파오프 같은 애들은 이제 남 마스크로요 자 그러니까 여러분들 여기 컴퓨터에 파 버튼이 있죠? 파 온오프 버튼도 이쪽에 디바이스가 있죠 디바이스인데 우리가 컴퓨터 돌아오는 상황에서 열심히 뭔가 처리하고 있는데 갑자기 전월버튼을 눌러버리죠 그러니까 오프 버튼을 눌러버리면 cpu에서는 이 오프에 대한 오프 됐다는 인터략터를 돌리는데 이 인터략터는 마스크 안속답지 바로 지연하지 않고 바로 그러니까 처리해봅니다
그래서 사용자가 전원을 오프했다는 말은 지금 더 cp가 의미있는 논쟁을 처리해도 처리할 필요 없다는 거죠 처리할 필요 없다는 겁니다 그러니까 지연시키지 않고 적신 인터스터를 처리하라는 거죠 그래서 이게 non-mask 프로예요 non-mask 프로, 인터스턴 하드웨어 리셋 또는 파워포 같은 것들이 리셋 버튼이 아닌지 파워포 같은 것들이 non-mask 프로에 들었다
그래서 이 그림을 보면 시스템에 다양한 객체 또는 이펜트들이 우선선이었어요 CPU가 처리해야 할 우선선이 있는데 우리가 그동안 배웠던 스레드들 있지 스레드들 보면 우선선이 있겠죠 제일 낮은 스레드들 있고 제일 높은 스레드들 있을 거 있지 자 얘네들은 이제 우선선이 있는데 그 보다 높은 우선선이 있는 놈이
인트랩트하고 인트랩트. 알죠? CPU가 처리하는 우선순위에 있는 객체 또는 이벤트. 그래서 일반적인 스레드의 우선순위보다 높은 게 마스크하고 인트랩트. 아무리 높은 스레드가 지금 괴산하고 있더라도 괴산하는 상황에도 마스크하고 인트랩트가 들어가게 되면 가장 높은 스레드의 실행을 중단하고 해당하는 인트랩트를 CPU가 처리한다. 알죠?
칠한다는 말이 뭐냐 하면 인테리어터가 우선선이 높기 때문에 높은 인테리어를 실행한다는 거예요. 그보다 높은 게 뭐냐면 입섭션 입섭션은 뭐였죠? 펜치포트 입섭션은 어떤 거였지? 펜치포트 입섭션, 메모리 접근할 때 발생한 입섭션 그리고 어떤 연산 하나가 잘못 연탄된 입섭션 걔네들이 마스케보 인테리어터보다 높다 예를 들어서 우리가 인테리어가 전달했어요. 키보드 인테리어가 전달했는데 인테리어가 전달하면
인테랍터에 처리해주는 코드가 시행될 겁니다. 그게 인테랍터 핸들러인데 인테랍터 핸들러에서 개관자가 잘못해서 어떤 갑을 0으로 나누었어요. 0으로 0으로 나누었으면 어떻게 해요? 그러니까 플로팅 포인트 입체처럼 발생할 수 있죠? 연산 관련된 입체처럼 발생할 수 있어요. 그 다음 입체처럼 핸들러가 또 굳어될 겁니다. 입체처럼 핸들러가 인테랍터 핸들러 내에서 입체처럼 핸들러가 굳어져 있다고 말해야 돼. CPU가 인터넷 핸드로보다 EOS 핸드로를 먼저 틀어야 되는 거죠
그처럼 1인처럼 우선소리가 20초이 높다 그리고 제일 높은 건 뭐냐면 넘바스크볼 인테렉터 이 셰프션을 처리하고 있는데 2, 3파트 눌렀다 2, 3파트 누르면 그냥 끊어야 되겠지 맞죠? 그러니까 넘바스크볼 인테렉터가 가장 높게 있는 유도순위를 가지고요 그래서
자, 봅시다. 자, 오늘 지금 인터넷과 디바이스가 있어요. 디바이스가 있고 CPU 내역, 실전에서 발생할 수 있겠지? 자, 그리고 이중션이 CPU로 전달될 수도 있겠지? 전달될 수도 있고 그리고 인터넷 발생할 거면 PRC에서 CPU로 인터넷과 전달될 수도 있겠지? 전달될 수도 있겠지? 자 그러면 우리가 보면, 여기 보면 이게
벡타 테이블이라고 있어요. 벡타 테이블. 벡타 테이블은 메모리 상에 올라 있는 테이블이고 각각의 벡타는 뭐냐 하면 인터락터 또는 이슈션이 발생했을 때 그 인터락터 이슈션을 처리할 함수 함수의 주소가 이 테이블에 전연된다.
이렇게 되죠. 인터렉터를 들어오면, 인터렉터를 처리해 주지 않으면 그러니까 시스템이 다운이 될 수 있어요. 다운이 될 수 있는데, 인터렉터나 익셔렉터를 들어오는 게 아니라 그 해당하는 인터렉터 익셔렉터를 처리할 코드 또는 함수 함수가 홈스를 호출해야 되는데 그 함수의 주소가 이 벡타 테이블 안에 지장된다. 입체에 자라 있다. 자, 이 그림, 예를 들면 그림을 보면, 자, 지금 어...
확정한 인터랍터를 처리해야 할 코드 또는 함수가 메모리상의 코드 요로 여기에 제작되었어요. 여기에 제작되어 있다. 여기 제작되었어요. 자 이때 인터랍터 서비스 루틴이라는 게 있는데 얘는 인터랍터 핸들러하고 이름이 똑같아요. 우리 시그널 핸들러 배웠지? 시그널 핸들러에서도 시그널이 전달되면 시그널 핸들러가 시정되지? 인터략터 마찬가지로 인터략터가 들여다듬으면 인터략터 핸들러가 실행되는데
인터렉터 핸들레를 보고 인터렉터 서비스 유툰이라고 이야기해요. 그래서 인터렉터 서비스 유툰이 여기 있다. 각각에 대한 다양한 종류의 인터렉터, 위셜션에 대해서 각 주소들이 배탈태라고 적용되어 있어요. 그래서 이 그림이 뭐냐면, 지금 메볼상에 뭐가 부러져 있지? 이제, 거미가 이제. 이거는 뭐냐면 CPU가 현재
위에서 차이드를 실행하고자 하는 거 있어요. 실행하고 있다. 이거 코드입니다. cpu가 실행하는 코드고 cpu는 위에서 차이드를 실행하고 있어요. 실행하고 있다가 갑자기 이 부분에서 이제 이 부분에서 인터넷터가 들어왔어요. 그렇지? 인터넷터가 들어왔어요. 인터넷터가 들어왔더니 어떻게? 여기 보면 이제 그에 해당하는 그러니까 인터넷터 서비스 트널을 벡타 테이블에서 찾아서 서비스 트널을 실행하게 되겠지?
처리가 완료되면 어떻게 해야 되나? 이제 CPU는 아까는 중간된 유치에 따라서 같이 실행된다 그 과정에 그림으로 보여준 겁니다 그렇게 CPU가 어떤 스레드에 코드를 실행하고 있을 겁니다 실행코드를 실행하고 있을 겁니다 인터넷에 발생하면 딱 정지해야 되죠 정지하고 인터넷에 대응하는 ISR 서비스 턴을 실행하고 실행이 끝만 실행하면 다시 정지해야 된 2층에서부터 다시 시작한다
잠자 시간이지, 맞지? 12시간 지나면 밥 먹고 왔으면 잠자 시간이돼요 이제 몇 번 안 남았어요? 한 번 밖에 안 남았네 다음 주 월요일밖에 안 남았는데 생각 안 한다 3학년 2학기 또 올라가니까, 맞죠? 1학년 때 온 학생도 있을텐데
지금 곧 사막이야태로 올라간다니, 맞죠? 세월이 빨라요. 자, 그래서 여기가 나옵니다. 백화 테이블은 뭐냐 하면, 인터넷터 입찰처의 서비스 루틴, 입찰처 서비스 루틴, 인터넷터 서비스 루틴의 관리되는 테이블이고, 이 테이블은 시스템 부팅할 때 구성이 된다.
그러면 여러분도 USB 메모리스틱이라든지 키보저라든지 마우스 같은 것을 꽂게 되면 띵동 하면서 디바이스가 멀리졌다 디바이스 드라이버가 수시됐다 그 실제는 일단 해당하는 디바이스에 대한 인터넷터 핸들러가 ISR이 베타 테이블 안에 등록됩니다 부팅할 때 그리고 디바이스가 물려질 때
해당하는 디바이드라이버가 이 안에 있는 인터럽터가 이 테이블 안에 등록된다 알겠죠 자, 우리 보면 우리가 인터럽터의 상태를 보면 상태를 세 가지 정도였어요 하나는 그러면 마스크든 인터럽터 일시블록됐다 일시블록
블록된 상태가 있었고 두 번째는 펜딩 지금 CPU는 인터넷터를 하나의 순간에 하나밖에 실행 못해야겠지 CPU가 인터넷 헨들러를 동시에 실행할 수 없잖아 반드시 한 순간에는 하나밖에 실행 못한다 우선소리가 넌 인터넷터를 먼저 실행시켜야 되는 거지
인테략터가 처리되고 있는 순간에 낮은 순간 인테략터가 들어오게 되면 어떻게 해 그 인테략터는 기다려야 되죠 기다려야 돼요 기다리고 있는 인테략터는 우리 보면 펜딩하고 그래요 펜딩 펜딩 펜딩 그러니까 프로세스가 높은 우선순위 인테략터를 처리하고 있을 때 이제, 그러니까, 기다리고 있네.
인트랙터 자 그리고 액티브 상태는 현재 프로세스가 체리하고 있는 인트랙터 뒤세부된 얘네들은 다시 내부됐어 그지?
그래서 여기 보면
여러분들 보면 이게 마스크가 안 보이냐고 있지 여러분들 옛날에 보면 시그널을 블록킹한다고 생각했대요 시그널을 블록킹하지 않으면 시그널 끼리 서로 레이스 컨디션 발생한다 시그널 핸들끼리 서로 레이스 컨디션 발생하였기 때문에 블록킹한다 여러분들 이제 시은아를
마스크 마스크 시키는 거지. 맞지? 시그
Blanc !
마스크 통해서 시나리오 블록도 안쓰고 블록도 안쓰겠지 개발자가 이제 단계적으로 블록을 해버려야 되겠지 자 여기 보면 마찬가지로 자 다음 이 마스크를 누가 시키냐고요 마스크를 마스크는 이렇게 커널 내에서 디바 드라이브를 짜는 사람이 이제 시근 인터넷터를 블록킹시켰어요 그치
그러니까 이제 마찬가지로 이렇게 기체에서 개발자가 마스크 기억이 안 나니? 인터넷터 몇 번 번으로 하겠지? 번호 언 마스크
자 이것도 왜냐하면 인트럭터 디바이트를 짜다 보면 인트럭터를 이제 내가 지금 중요한 부분을 지금 구도하고 있어야겠죠 절대 다른 인트럭터에서 방해받으면 다 되는 겁니다 방해받으면 여기저처럼 전입보수 같은 것들 전입보수라든지 매물 같은 것들이 이제 빼질 수 당연하죠 레이스 컨트롤이 되는 거예요 자 그러면 어떻게 돼요? 이 부분은 절대 다른 특정한 번호
이하에 인터넷을 누르면 안된다고 막아볼 수 있어야겠지 중요한 코드가 실행된 다음에 그 다음에 언마스크 해져야 되겠지 자, 이 코드는 누가 실행하죠? CPU가 실행하죠? CPU CPU를 실행합니다 CPU가 마스크 인터넷을 해버리면 CPU는 피아시아트로
CPU는 피아이셔한테 몇 번 인터랩터를 마스크 해달라고 요청을 보낸다. 3번 인터랩터를 마스크 해달라고 보낸다. 자 여기 보면 마스크! 마스크 닿는
그러니까 마스크 관련된 리스트는 생겼되지 마스크 관련된 리스트 3번이면 3번에 1을 딱 0, 1, 2, 3이라는 이 부분에 빗들을 1로 세팅해버려야겠지 3번 마스크 빗들은 1로 세팅해버리면 이 다음에 상반 인템탈이 오더라도 CPU한테로 전달합니다.
전달이 안된다. 막힌다는 겁니다. 전달이 안되고 옛날 시간에는 뭐였지? 시간 같은걸로 펜딩 기스트가 있었고 뭐 있었어요? 블록드 기스트가 있었지? 기억나지? 마찬가지로 구조가 똑같아요. 마스크가 있는데 이렇게 했으면 몇 번 마스크가 들어가면 해당을 풀 때 이렇게 세팅을 해버린다. 그런 다음에 3번이 전달이 되더라도 3번이 마스크가 됐으면
그럼 CPU로 인터넷도 전달이 안되다.
이렇게 해야 되지. 맞죠? 시간하라고, 인테라프터가 개인의 비타니까 어쨌든 이래 형태로 처리할 수밖에 없어요. 자, 그래서 봅시다. 인테라프터의 목록은, 마스크 할 인테라프터의 목록은 이제 프로세스가 PRC로 전달한다. 알겠죠. 알겠죠. 자, 그리고 이게 PRC의 중요력까지는 하나다. 알겠지? 마스크 하는 것들.
그리고 또 다른 피아시의 역할이 뭐냐면 아까 전에 우선순위 높은 인테랍터를 CPU로 전달하는 역할이 있었지 우선순위가 높은 인테랍터를 순수하게 해서 CPU로 전달한다 현재 CPU가 높은 우선순위에 가지는 인테랍터를 전달하고 있으면 낮은 우선순위에 가지는 인테랍터가 피아시로 전달하면 그냥 일시정지시킨다겠지 높은 순위에 인테랍터를 들어오면 CPU는 바로 전달치킨다
자 그 이야기를 하고 있어요. 자 그래서 이 그림은 뭐냐면 아까 제가 벡터 테이블이었지. 벡터 테이블, 그러니까 인텔 시큐어에 대한 벡터 테이블에 대한 각각의 번호, 벡터 테이블의 인덱스에 대한 어떤 함수들이 이렇게 되어있느냐. 자 0번은 0으로 나누고, 그리고 1번은 비버깅 셉션.
그리고 우리가 보면 쭉 보습. 페이지 포인트 같은 것도 있지. 페이지 포인트 15번. 테이블 인덱스가 14번에는 페이지 포인트고, 플러스팅 포인트는 16번. 그리고 32번에 250억까지는 일반 마스카 인터넷. 일반 디파이트들이 보내는 인터넷에 대한 핸들러가 등록된다.
브릭 포인트가 문제 아니지? 브릭 포인트가 문제 아니지? 우리 디버그 할 때 있지? 디버그 디버그 할 때 브릭 포인트를 걸어버리지? 그 다음에 브릭 포인트를 걸어버리면 그 위치에서 이피셜 맞사는 거지? 이피셜 맞사는 거지? 그 코드 상태에 이치 증진이 되겠지? 맞지?
*Clears*
어이구 내용이 많대 오늘 한 시간을 할 때 아까 봤잖아 다음주에 만난 거 같은데 많대 자 인테르토스 순위 자 디바이스별로 보면 중요한 디바이스 있어요 예를 들어서 타이머 타이머 인테르토가 있어요 타이머 인테르토는 그러니까 주기생 시간으로 CPU한테 계속
인터테크다 그 타이머도 작년에 폐았지? 작년에 폐았지? 안 폐었나? 폐았잖아 타임 관련된 타이머가 계속 주기적으로 지플레트를 전해야되고 그리고 ITC 메인보드상에 1주 단위로 증가시킨 타이머였고
그리고 CPU 내부에 보면 주기적으로 계속 몇 나로 세컨 단위로, 몇 마이크로 세컨 단위로 계속 인테리스트 발생할 수 있다는 거죠. 그 타이머가 우선순위가 가장 높아요. 그 타이머가 오둔하게 해버리면 시스템 시간이 오둔하게 되고 그리고 걔가 오둔하게 해버리면 스케줄로가 제대로 돌아가잖아요. 스케줄로가 돌아갈 때 뭐 불하죠? 제가 시럽혀야지. 예를 들어서, 탐 콜테만큼
다른 카트마크를 CPU를 실행하다가 다른 CPU를 실행하고 웬컷들을 해야 되는데 만약에 타이머 인터넷트가 잘못 구성되면 어떻게? 정확한 라운드로브 스케줄이 되지 않을 수 있겠지? 그러니까 스케줄러 입장에서, 아니 그런 입장에서 보면 이 타이머가 우선이 가장 높아요, 알지? 그리고 키보드, 키보드가 있고 또 다른 디스크 디바이스가 있으면 우리 이 시스템에서는 키보드를 우선 순위가 늦게 지기지 않는 겁니다
자 그래서 내가 이해하는 이유는 뭐냐면 우리는 디바이스별로 우선 수리 맞춰진다 그래서 여기 보면 동시에 여러 개의 인터넷트가 전달될 수 있어요 cpu는 반드시 하나만 칠해야 되겠지 하나만 칠해야 되요 하나만 칠해야 되고
그때 어떤 인터넷터를 결정할 때는 인터넷터의 우수소리를 기반으로 해서 결정하다 인터넷 우수소리를 결정한다 그래서 인터넷터 우수소리가 높은 높은 경우는 현재 약한 우수소리가 낮은 인터넷터를 쉽게 처리하고 있다 즉, 인터랩트 스피크 스튜트는 쉽게 와 필요 없다는 거 있지
예고에서 얘보다 높은 인테랍터가 돌았어요 우선선이 높은 인테랍터가 돌아요 CPU는 즉시 낮은 인테랍터 처리를 정돈하고 높은 우선선이 가지는 인테랍터를 처리할 거였지 자, 그 이야기 라고 하죠 그 이야기 그때 인테랍터 우선선이 레벨을 보고 IPL을 보여야겠죠 예를 들어서 우리가 디스크 관련된 인테랍터를 처리하고 있는데 무선투를 가장 높은 게 그죠? 타이머지
타이머 인터략터가 들어오게 되면 디스크 처리하는 인터략터의 재료를 중전하고 타이머 인터략터를 진행해야 돼요 그렇게 하죠 준연도 높은 곳으로 먼저 처리해야 되겠죠 이야기를 하고 있어요 타이머 인터략터가 있고 인터략터가 있으면 당연하게 타이머 인터략터는 먼저 처리해야 됩니다 그런데 문제는요 오늘은
자 인터럽트 미스 오늘 같은 학생 중간에 운동학생들이 끝났다고 아닙니다 어디까지 고민을 했어요 자 봅시다 자 인터럽트 미스가 발생하면 시스템이 다운될 수도 있고 어떤 앱이 오동작도 할 수도 있고 모이스가 오동작도 할 수도 있지 그래서 인터럽트 미스는 절대 발생하면 돼요 시스템이 다운될 수도 있어요 그래서 보면 아니 키보드 20년인데 키보드가 안 바뀐다 여러분들 돈 나겠죠
맞잖아, 그렇지? 눌렀을 때 처리 안된다 말이든 테스트의 미스터가 발생할 수 있다는 거다, 그렇지? 지금 뭐냐면 인터넷터 ISI 지금 인터넷 서비스 튼튼이 인터넷터 처리를 미스했다, 미스했는데 미스 됐다 미스 됐는데 문제는 그 미스의 원인이 뭐냐면 내가 아닌 다른 인터넷터의 처리 시간이 너무 길어서 온프레터 미스가 발생하잖아요 그치?
그 이야기 라고 했어요. 마을에 있는데 그림을 좀 봐야해요. 인터넷 서비스 유툰 처리가 너무 길어지면 여기 보면 인터넷 서비스 유툰 처리가 늦어져서 인터넷 서비스 미스가 발생할 수 있다. 그래서 밑에 보면 인터넷 미트는 떳된 상황인데 인터넷가 발생했는데 프로세스는 현재 너 바꿨어?
너무 바빠서 그 인터넷터를 처리 못하는 사이라고 보면 된다. 그렇지? 처리 못하는 사람. 그래서 이 카드가 너무 너름대로 이해 안 되겠지? 이 그림은 지금 주기적으로 디바이스에서 인터넷터가 들어오고 있다고 과정이에요. 여기가 특정 디바이스, 동그란 디바이스입니다.
그 다음에 인터렉터가 들어가야겠지. 인터렉터입니다. 여기 보면 인터렉터 레이터시였어요. 인터렉터 레이터시. 인터렉터 레이터시는 뭐를 하냐면 TV는 인터렉터가 발생했다. 디바이트 발생했죠? 발생하거나 그 시점부터 ISR이 시작된 시장 시작된 질 때까지
걸리는 시간, 걸리는 시간이 TV, 인터렉터 발생했죠? 인터렉터 발생했고, 인터렉터 서비스 유틈, 호출 될 때까지는 걸리는 시간, 호출 될 때까지는 걸리는 시간, 함수 처리는 아닙니다. 그 함수 커드 처리는 아니고, 잠시 그 함수가 딱 시작되면 그 순간, 알겠죠?
그리고 TC는 뭐냐 하면, TC는 인터넷 서비스 유통이 시작되고 인터넷 서비스 수령이 처리되는 데까지 걸리는 시간 처리될 때까지 걸리는 시간 그러면 Td는 뭐죠? 결국 인터넷을 하나 처리할 때까지는 전체 시간이죠 그러니까 데이터에서는 인터넷 서비스가 발생했다 함수, 소축까지는 걸리는 시간이었지
함수 내 코드를 실행하지 전 단계 그 다음 TC는 인터넷 코드 전체를 실행하는 시장 그래서 자 여기 봅시다 자 여기 그림 봐요 자 여기 그림에서 TC PC가 여기까지 됐지? 맞지? 여기 있지?
자, 얘는 TC가 오래 걸린다. 오래 걸린다. 그렇지, 오래 걸린다. 여기까지 갔다. 여기까지 갈 수 있지. TC가 길어질 수 있지. 개바지가 잘못 짜서 코드 잘못해서 TC가 여기서 끝나는 게 아니고 여기서 끝났다 치러요. 끝났다 치러요. 다음은 CPU가 여기서 끝까지 신경 쓰면 다음 인터랍터가 들어올 때 이 인터랍터를 그러니까 그동안 이겨낸 데이터치가
중대가 안될까? 여기 T, 얘가 끝날 때 여기야, 그렇지? 끝날 때 끝날 때 여기인데 자, 여기 인터넷터가 들어왔어요, 그렇지? 들어왔는데 지금 CPU는 얘한테 지금 집중돼, 이제? TC에 그러면 인터넷터가 되더라도 그러니까 CPU가 다음 인터넷터를 받고 인터넷터 핸들러를 호출하는 시점까지 시퓨가 동작이 안 할 건데
왜냐하면 현재 TC를 실행하고 있습니다. 이 코드를 실행하고 있으니까 다음 인테락터에 대한 레이턴시가 아니고 함수호 처리가 지연되겠죠. 만약에 얘가 우약정 길어지면 계속 다음 인테락터에 대한 인테락터 핸들러가 시작되겠죠.
다음 시간에 다시 이야기할게요