본문 바로가기

CS/운영체제

(28)
Register 레지스터란? 레지스터는 CPU 내부에 위치한 고속 기억 장치인데요. 이들은 데이터를 일시적으로 저장할 수 있습니다. 그리고 CPU가 연산을 수행하는 데 필요한 정보를 제공하는 역할을 하고 있습니다. 레지스터는 CPU가 매우 빠른 속도로 접근할 수 있기 때문에 CPU가 작업을 수행할 때 가장 먼저 사용하는 메모리 공간입니다. 그렇다면? 레지스터의 주요 역할은 무엇일까?레지스터는 데이터 저장 및 빠른 접근이 가능하는 것입니다. 레지스터는 CPU 내부에 있기 때문에 다른 주기억 장치인 RAM보다 훨씬 빠르게 접근할 수 있습니다. 그리고 이는 연산 속도를 향상하고 프로그램 실행을 더 효율적으로 할 수 있게 만들어 줍니다. CPU에서 수행되는 연산은 주로 레지스터에서 이루어지게 됩니다. 그리고 프로그램의 흐름을 제어하기도 하..
Run 중에 Interrupt가 된다면? Interrupt되는 순간과, Wating으로 상태변화 되는 순간 전부 Context Switching이 일어난다라고 설명을 했었던 기억이 있다. 하지만, 고작 keyboard, mouse 이벤트로 Context Switching이 일어날수 없지 않을까?Interrupt란?일단 Interrupt라는 것을 설명해보도록 하겠습니다. Interrupt는 외부 또는 내부 이벤트인 하드웨어 신호 또는 시스템 콜과 같은 것들로 인해 실행중인 프로세스를 일시 중단하는 것을 의미합니다. Interrupt 신호는 하드웨어 장치인 키보드, 마우스, 디스크, 타이머가 CPU에 보내는 신호입니다. 이러한 신호를 감지하게 되면 CPU는 일단 현재 작업을 중단하게 될 것입니다. 그 이후 인터럽트 벡터 테이블(Interrupt V..
Process가 생성되면서 PCB(Process Control Block)이 어떻게 변화할까? 프로그램을 명령어나 아이콘을 클릭함으로써 프로세스로 만드는데, 우리는 이 프로세스를 실행 중인 상태 OS의 제어를 받고 있는 상태라고 불렀습니다. 그래서 이 프로세스가 실행되려면 CPU가 연산을 처리하고 있는 것이죠? 그럼 CPU는 어떤걸 참조해서 연산과정을 처리하는 걸까요? 프로세스가 생성되면서, PCB(Process Control Block)가 동시에 생성됩니다. 이 내부에 어떤 과정이 있긴 합니다. 하지만 여기선 어떻게 할당 되는지 저장되는지 초기화 되는지를 설명해보겠습니다.PCB는 어떻게 할당되어 질까?할당은 여러가지 방법들이 존재하는데, 그중에서 사전 할당(Pre Allocation)이 있습니다. 우리가 잘 아는 Pool 있죠, DB의 Connection Pool처럼 바로 Connection을 ..
공유메모리(Shared Memory)를 통한 접근과 스레드(Thread)를 사용한 접근의 차이 사실은 스레드의 접근은 이 내용을 읽다 보면 그래서 스레드 쓰는구나 할 수도 있어서 과감하게 제외했습니다.사실 공유 메모리를 사용해 프로세스가 접근하는 것과 스레드가 공유 자원에 접근하는 것은 맥락은 비슷하다고 느껴진다. 그래서 이 둘의 차이가 분명히 존재하지 않을까? 해서 찾아본 내용입니다. 공유 메모리(Shared Memory)는 가장 빠른 IPC 매커니즘으로 평가를 받습니다. 왜냐하면, 공유메모리는 데이터를 프로세스들 간에 전달할 때 운영체제 커널을 통한 데이터 복사하지 않고 사용자 공간에서 바로 데이터를 읽고 쓰게 설계되었기 때문입니다. 다른 프로세스끼리 통신을 하기 위해선 무조건 Kernel 메모리 공간에 데이터를 보내고 다른 프로세스가 Kernel 메모리 공간에 접근해 데이터를 읽어와야 하는 ..
프로세스간 통신 IPC(Inter Process Communication) 협력 프로세스는 다른 프로세스와 데이터를 공유하거나 어떤 방식으로든 서로 영향을 주고받는 프로세스를 의미합니다. 이러한 프로세스들은 시스템 내에서 서로 정보를 교환하거나 동기화를 수행해 작업을 수행합니다. 이렇게 협력 프로세스는 프로세스 간 통신(Inter Process Communication) 메커니즘을 통해 서로 데이터를 주고받거나 상태 정보를 공유합니다. 이러한 방법은 총 7가지의 프로세스 통신이 존재합니다. 1. 파이프(Pipes) : 단방향 통신을 위한 기본적인 IPC 메커니즘입니다. 한 프로세스의 출력이 다른 프로세스의 입력으로 직접 연결됩니다. 파이프는 일반적으로 부모-자식 프로세스 간에 사용되며, 데이터 스트림을 전송하는 데 사용됩니다. 2. 이름 있는 파이프(Named Pipes) : ..
Running중이고, Kernel mode로 전환되면서 Waiting으로 상태가 변경된다면? 우리는 Running만 하고 바로 Ready Queue로 넘어가는 것은 Kernel Mode의 실행이 없을 때입니다. 단순히 현재 실행되는 상황을 잠시 접어두고 Ready Queue로 보내버리면 될 것입니다. 하지만, I/O가 이루어지는 데이터 이동 또는 Network를 통해서 옮겨지는 데이터 등이 있다면? 우리는 그 데이터를 받기까지 기다려야 할 것입니다. 어디서 대기를 하냐면 Waiting Queue에서 대기를 하게 됩니다. 이제 요청했던 데이터가 도착을 하게 되고 PCB에 상태가 저장될때까지는 우리는 Waiting의 상태가 되어야겠죠? 그렇다면 당연히 Memory에 프로세스의 메모리 영역이 할당되어 있을테고요? 그런데 만약 Ready Queue에서 새로운 프로세스를 메모리를 할당해줘야 하는데 메모리..
프로세스가 Ready Queue에서 선택되어서 Running 상태가 되었을때 위 과정이 어떻게 일어나게 되는지 얘기를 해보고자 합니다. Ready Queue에 저장되어있는 PCB(Process Control Block)들이 이제 단기 스케줄러(Short Term)에 의해서 선택이 됩니다. 이 단기 스케줄러는 어떤 기준을 갖고 선택을 하게 될까요? 선택 기준은 첫번째는 우선순위가 될 것입니다. 우선순위가 높은 프로세스가 먼저 선택이 될 것인데, 우선순위를 결정짓는 것은 window, Linux마다 다를 것입니다. 이건 찾아봐야겠네요. 그 다음은 스케줄링 정책에 따르게 됩니다. 여러 스케줄링이 존재하는데 아래와 같습니다. 총 두가지 형태가 있는데, 비선점 선점입니다. 비선점이라는 것은 다른 프로세스가 해당 프로세스가 동작이 완료할 때까지 뺏을 수가 없다는 뜻입니다. 제 생각에는 반대..
프로그램을 더블클릭하거나 명령어를 통해서 실행시켰을때 프로그램은 HDD, SSD에 저장되어 있는 정적인 객체를 의미하는데, 프로세스는 이와 반대로 동적인 객체이며 실행 중인 프로그램을 의미한다. 그렇다면, 프로그램이 프로세스가 되어서 CPU, Memory, I/O Device를 확보하는 과정은 어떻게 이루어지는지 순서대로 알아보도록 하겠습니다. 일단 우리는 프로그램의 더블클릭 또는 명령어를 통해서 실행시키려고 할 것인데, 이 행위 자체가 프로세스를 만드는 것을 의미하고요. 일단 프로그램이 프로세스가 되기 전에, Input Queue라는 저장소로 삽입이 됩니다. 어떤 정보를 갖고 들어가게 되냐면, 최소한의 데이터만 들고 Input Queue에 삽입이 됩니다. 최소한의 데이터라는 것은 프로세스 ID, 초기 상태, 메모리 정보, 스케줄링 정보 등이 실리게 되고요..