들어가기 앞서 해당 글은 '혼자 공부하는 컴퓨터구조 + 운영체제'를 참고로 작성되었습니다.
컴퓨터 구조에서 프로그램이 어떤 방식으로 동작하는 지 알아봤다. 메모리에 프로그램이 할당되고, cpu가 레지스터를 이용하여 연산을 하여 실행하고, 인터럽트를 거는 등 여러가지 동작을 통해 프로그램이 실행 된다.
그럼 그전에 메모리에 프로그램을 올리는 건 누가 할까? cpu 또 어떻게 알고 메모리에 접근하여 그 프로그램을 실행시킬까? 그 일을 하는 것이 바로 흔히 말하는 운영체제라는 프로그램이다.
컴퓨터에서 실행되는 많은 프로그램이 마음대로 cpu나 하드웨어에 접근하면서 작업을 해버리면 프로그램이 제대로 실행되지 못하기 때문에 모든 프로그램은 운영체제의 관리하에 하드웨어에 접근한다.
운영체제는 메모리의 커널 영역에 적재되어 실행된다. 그 외는 사용자 영역이며 사용자 영역은 다시 세부적으로 나뉜다.
응용 프로그램은 실행 중 하드웨어의 접근이 필요하면 커널 모드로 전환이 필요한데, 이를 위해 시스템 호출(system call)을 통해 커널 모드로 전환 후 운영체제의 서비스를 받게된다. 시스템 호출은 일종의 인터럽트인데, 이와 같이 특정 명령어에 의해 발생하는 인터럽트를 소프트웨어 인터럽트라고 한다. 해당 인터럽트는 인터럽트 후 커널모드 전환, 해당 인터럽트 처리, 복귀 순으로 실행된다.
메모리에서 실행되는 많은 프로세스들은 정해진 실행 타임이 맞춰 순차적으로 실행이 되는데, 이렇게 순차적으로만 실행 해서는 이상하게 동작할 수도 있다. 해당 문제를 해결하기 위해 동기화(synchronization) 작업이 필요하다. 이 때 교착상태라는 또 하나의 문제가 발생하게 되는데, 해당 문제를 해결하는 것 까지가 핵심이라 할 수 있겠다.
각 프로세스는 여러 스레드(thread) 를 가질 수 있다. 스레드는 쉽게 말해 실행의 단위인데, 스레드가 여러개면 프로세스는 스레드의 수만큼 동시적인 작업을 할 수 있다. 다만, 스레드가 많다고 꼭 좋은 것은 아니다.
이상의 모든 작업들을 cpu에게 넘겨줄 때 또한 관리가 필요하다. 일반적으로 하나의 cpu(코어)에는 하나의 프로세스만 실행 가능하다. 이에 운영체제는 프로세스에 공정하게 cpu를 할당하기 위해 우선순위, 시간 등을 정하여 프로세스를 실행 시켜야 한다. 이를 CPU 스케쥴링이라 한다.
여기까지가 운영체제의 큰 틀이다. 사실 메모리 적재 방법과 문제점, 멀티 스레드 등 이야기할 것들이 많다.
책을 한번 정독 하고 공룡책도 참고했지만, 아직 머릿속에서 지식들이 이어지지 않는다. 다시 계속 읽어가며 컴퓨터 구조와 같이 하나하나 뜯어 볼 생각이다.
dx12를 공부하면서 필요하다 생각하여 시작한 운영체제 공부인데, 일단 이 정도만 해도 공부하며 이해하는데는 지장이 없을 것 같다.
dx12에서 먼저 맛보고 컴퓨터 구조 이해가 수월 했던 거 처럼 계속 무언가 작업하다 보면 아마 운영체제 또한 감이 잡히지 않을까 생각한다.
'개발공부 > 운영체제 등' 카테고리의 다른 글
프로세스 (1) | 2023.12.17 |
---|---|
CISC와 RISC (1) | 2023.11.21 |
레지스터와 CPU 동작원리 (0) | 2023.11.21 |
여러 입출력 방법 (프로그램 , 인터럽트 , DMA) (0) | 2023.11.20 |
인터럽트(Interrupt) (0) | 2023.11.16 |