운영체제의 필요성과 컴퓨터 시스템에 대하여..
운영체제는 두가지 관점에서 볼 수 있다
왜??
사용자 프로그램과 하드웨어 사이에 위치하기 때문에
먼저 사용자 관점에서 보자면 그냥 하드웨어 위에 덩그러니 있는 것보다 시스템을 편리하게 사용할 수 있다.
운영체제가 알아서 효율성과 형평성까지 고려하면서 자원을 할당해주니 사용자는 각각 독자적 컴퓨터에서 내것만 실행하는 것같은 착각을 한다 또한 여러개의 프로그램을 돌려도 모두 동시에 돌아가는 것같은 착각을 한다
우리가 편한만큼 운영체제가 열심히 일하고 있는것..
이렇게 복잡한 하드웨어 자원을 사용자나 개발자가 이해하기 쉬운 형태로 단순화하여 제공한다 이를 추상화라고 하는데
메모리에 어떻게 저장되는지는 몰라도 운영체제의 메모리 관리 덕분에 정해진 메모리보다 더 많은 일을 할 수 있고 여러프로그램을 동시에 실행하는 것처럼 보다 편하게 일하는 경우들을 다 추상화의 결과로 볼 수 있다
다음으로 하드웨어 관리자 관점에서 보자면 컴퓨터 시스템 자원을 효율적으로 관리할 수 있다. CPU는 매우매우매우 비싼자원인데 이러한 자원이 최대한의 성능을 내도록 도와주고 하나의 프로세스에게 자원이 많이 할당 되거나 부족한 상황을 막는 등 형평성도 고려하여 자원을 분배한다. 아무것도 모르는 사용자가 이러한 일을 할 수 있을까.. 일단 난 못한다!!
또한 사용자들이 잘못된 프로그램을 만들어 하드웨어 또는 다른 운영체제에 피해가 가지 않도록 보호할 수 있다
이러한 이유로 운영체제는 꼬옥 필요한 시스템이다
운영체제가 하는 일은 크게 CPU 스케줄링, 메모리 관리, 파일관리, 입출력 관리, 프로세스 관리로 볼 수 있다
프로그램을 실행했을때 컴퓨터 시스템에서는 다음과 같이 일한다

메모리에서는 사용자가 작성한 프로그램을 메모리에 올려 실행시킨다 유저모드로 막 실행을 시키다가 입출력 작업이나 하드웨어 자원이 필요한 작업을 할 때 커널 모드로 전환된다
왜??
사용자는 I/O 디바이스에 직접적으로 접근하지 못하기 때문에 프로그램 실행 중 디스크에서 데이터를 읽어오거나 화면에 출력해야하는 I/O작업이 있다면 스스로 운영체제(커널)에게 CPU를 넘겨주고 운영체제가 전담 CPU(controller, 새끼CPU)에게 일을 시킨다 이렇게 일을 넘겨준 CPU는 또 다른 일을 하다가 I/O 디바이스가 일이 끝나면 새끼CPU가 CPU에게 인터럽트를 걸어 CPU 할당을 요청한다 할당 요청을 받은 CPU는 운영체제에게 넘어가고 전에 요청한 메모리 영역에 local buffer(data register) 데이터를 복사한다
여기서 말하는 커널모드와 유저모드는 CPU의 mode bit으로 구분할 수 있으며 0일때는 커널모드, 1일때는 유저모드를 나타낸다. 커널모드일때는 메모리 및 I/O 디바이스 접근과 같이 보안을 해칠 수 있는 중요한 명령어(특권 명령)을 수행할 수 있다. 반면 유저 모드일때는 제한된 instruction만 CPU에서 실행 가능하며 사용자 프로그램이 입출력을 받으려면 시스템 콜을 호출해야한다
아까도 말했듯이 사용자 프로그램은 직접 os 주소로 점프가 불가능하고 mode bit 1 내부에서만 점프와 함수 호출이 가능하다 그래서 프로그램이 입출력 작업을 필요로 하다면 시스템 콜을 통해 Interrupt line을 셋팅하고 mode bit을 0으로 바꾸고 커널모드로 전환해 입출력 장치에 접근한다 이러한 시스템 콜은 소프트웨어 인터럽트라고 할 수도 있다
왜??
모르면 질무냉
인터럽트가 걸리면 CPU는 레지스터와 PC를 저장한 후 CPU 제어를 인터럽트 처리 루틴에 넘긴다 타이머나 입출력 디바이스 같은 하드웨어가 발생시킨 인터럽트를 하드웨어 인터럽트라 하고 사용자 프로그램이 커널 함수를 호출하는 경우(시스템 콜), 프로그램이 오류를 범한 경우(exeception)를 소프트웨어 인터럽트(trap)이라 한다 즉, 입출력을 요청할땐 소프트웨어 인터럽트가 걸리고 입출력 작업이 끝나면 하드웨어 인터럽트가 걸린다고 볼 수 있다
그럼 입출력을 짱많이 받는 프로그램이라면 매순간 인터럽트가 걸릴텐데 이건 괜찮을까?
그래서 DMA가 존재한다 원칙적으로는 메모리에는 CPU만 접근 가능하지만 한 작업에서 입출력 디바이스가 많이 쓰이는 경우 CPU 인터럽트가 많이 걸리게 되고 이는 성능 저하로 이어진다 ㅜㅜ 이런 오버헤드를 해결하기 위해 디바이스 작업이 끝날 때 DMA가 레지스터의 내용을 메모리로 복사하고 복사 작업이 끝나면 DMA controller가 CPU에게 인터럽트를 한번만 걸어 메모리에 복사한 사실을 알린다 이렇게 되면 메모리에는 CPU, DMA controller가 접근할 수 있게 되는데 이 둘이 같은 공간에 동시에 접근하는 것을 중재하기 위해 memory controller가 존재한다
마지막으로 CPU의 자원을 효율적으로 할당하고 독점을 방지하기 위해 timer가 존재한다 일정한 타임 퀀텀(time slice)을 설정하고 그 시간이 경과하면 인터럽트를 걸어 CPU가 다른 일을 하도록 CPU 제어권이 사용자 프로그램에서 운영체제로 자동으로 넘어가게 된다
이렇게 운영체제의 필요성과 프로그램이 실행될때 컴퓨터 시스템에서 어떤 일이 일어났는지 알아보았다
얼른 시험이 끝나면 좋겠다
'CS > OS' 카테고리의 다른 글
| [OS] Semaphore(쎄마포어) (4) | 2025.08.02 |
|---|---|
| [OS] Critical Section Problem, 쓰레드간 협력 (0) | 2025.07.05 |
| [OS] NachOS 환경 설정 (3) | 2025.05.21 |
| 좀비가 되긴 싫었는데... 부모가 나를 버렸어 (1) | 2025.04.30 |