1. 운영체제를 알아야하는 이유
우리가 사용하는 모든 컴퓨터에는 운영체제가 설치되어있다.
대표적인 데스크토 운영체제로는 윈도우와 맥, 리눅스가 있고
스마트폰 운영체제로는 안드로이드와 IOS가 있다.
컴퓨터 부품들은 운영체제의 지휘하에 작동한다.
1.1 운영체제란
모든 프로그램은 하드웨어를 필요로한다.
이때 프로그램 실행에 마땅히 필요한 요소들을 가리켜 시스템자원 혹은 자원이라고한다.
컴퓨터구조에서 배웠던 CPU, 메모리 등 모두 시스템 자원이라고 할 수 있다.
여기서 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램이 운영체제이다.
운영체제도 하나의 프로그램이다.
그래서 운영체제 또한 메모리에 적재되어야한다.
하지만 운영체제는 특별하기 때문에 메모리내의 커널영역이라는 공간에 따로 적대되어 실행된다.
메모리에 커널영역을 제외한 영역, 즉 응용프로그램이 적재되는 영역을 사용자 영역이라고한다.
즉 한마디로 운영체제는 커널영역에 적재되어 사용자영역에 있는 프로그램들이 잘 돌아가도록한다!!!!
좀 더 구체적으로 운영체제가 하는 일을 들여다보면
운영체제는 프로그램을 메모리 어디에다 둘지도 결정하고, 쓸데없는 메모리도 관리하며 메모리 지원을 관리하고,
각 프로그램이 CPU를 얼마나 쓸지도 스케쥴링하고, 하드웨어와 프로그램 사이도 관리한다고 볼 수 있다.
약간 컴퓨터 계의 정치인?
1.2 운영체제를 알아야하는 이유
운영체제가 없다면 개발자가 직접 하드웨어도 조작하는 코드를 짜야한다.
어떻게 보면 우리는 운영체제의 도움을 엄청 받고 있는것이다.
운영체제는 하드웨어 상에서 어떻게 작동하는지 잘 알고있다.
하지만 프로그램이기 때문에 우리와 소통하기 쉽다.
운영체제의 도움을 받으면 우리는 문제해결하는데에 큰 도움이 될 것이다.
2. 운영체제의 큰그림
운영체제는 사용자가 실행하는 응용 프로그램이 올바르게 실행되도록 돕고 필요한 자원을 할당해준다
2.1 운영체제의 심장, 커널
운영체제는 규모가 매우 큰 프로그램이다. (리눅스는 천만줄 넘음!)
운영체제의 핵심서비스는 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능이다.
이러한 핵심서비스를 담당하는 부분을 커널이라고 한다.
운영체제가 설치된 모든 기기에는 커널이 있다.
어떤 커널을 사용하는지에 따라 여러분이 실행하고 개발하는 프로그램이 하드웨어를 이용하는 양상이 달라지고 결과적으로 컴퓨터 전체의 성능도 달라질 수 있다.
운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스도 있는데, 대표적으로 사용자 인터페이스가 있다.
사용자 인터페이스란 윈도우의 바탕화면과 같이 사용자가 컴퓨터와 상호작용할 수 있는 통로이다.
종류로는 화면처럼 그래픽을 기반으로 컴퓨터와 상호작용할 수 있는 그래픽 유저 인터페이스와 명령어 기반으로 컴퓨터와 상호작용할 수 있는 커멘드 라인 인터페이스 등이 있다.
이러한 사용자 인터페이스는 상호작용에 활용될 뿐이지 커널에 속한 기능은 아니다.
2.2 이중 모드와 시스템 호출
운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하지 못하게한다.
응용 프로그램이 운영체제에 접근하여 CPU와 메모리 등에 접근한다면 무질서해지기 때문에
응용 프로그램은 운영체제에게 자원 접근을 요청하여 작업을 수행한다.
이때 작업도 응용프로그램이 부탁한대로 운영체제가 실행해준다.
이러한 운영체제의 문지기 역할은 이중모드로써 구현된다.
이중모드란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널모드로 구분하는 방식이다.
사용자모드는 운영체제 서비스를 제공받을 수 없는 실행모드이다.
즉, 커널 영역의 코드를 실행할 수 없는 모드이다.
대부분의 응용프로그램인 사용자모드이다.
커널모드는 운영체제 서비스를 받을 수 있는 실행모드이다.
운영체제는 커널모드로 실행되기 때문에 자원에 접근할 수 있다.
사용자모드로 실행하는 프로그램이 자원에 접근하는 운영체제 서비스를 받으려면 운영체제에서 system call로 요청을 보내야한다. 시스템콜을 이용하면 커널모드로 전환하여 운영체제의 서비스를 받을 수 있다.
시스템 호출은 일종의 인터럽트이다.
시스템 호출을 발생시키는 명령어가 실행되면 CPU는 지금까지의 작업을 백업하고, 커널영역 내에 시스템 호출을 수행하는 코드를 실행한 뒤 다시 기존에 실행하던 응용 프로그램으로 복귀하여 실행을 계속해 나간다.
2.3 운영체제의 핵심 서비스
프로세스관리
실행 중인 프로그램을 프로세스라고 한다.
컴퓨터를 사용하는 동안 메모리 안에 새로운 프로세스들이 마구 생성되고, 사용되지 않는 프로세스는 메모리에서 삭제된다.
하나의 CPU는 하나의 프로세스만 실행할 수 있기 때문에 CPU는 프로세스들을 번갈아가면서 실행한다.
이때 각 프로세스는 상태도, 사용하고자 하는 자원도 다양하다.
입출력장치는 사용하는 프로세스도있고, CPU만 사용하는 프로세스도 있고, 당장 실행할 수 있는 프로세스도 있고, 당장 사용할 수 없는 프로세스도 있다.
그래서 운영체제는 지혜롭게 CPU를 프로세스들에게 할당해줘야한다.
자원 접근 및 할당
모든 프로세스는 실행을 위해 자원을 필요로한다.
그리고 운영체제는 그 자원을 할당해준다.
- CPU는 앞서 말했듯이 한번에 하나의 프로세스를 실행할 수 있기 때문에 어떤 프로세스를 얼마나 CPU를 이용하게 해줄 것인지 운영체제가 잘 관리해줘야한다.
- 메모리에 적대된 프로세스들은 크기도 주소도 가지각색이다. 같은 프로그램이라도 실행할 때마다 적재되는 주소가 달라질 수 있다. 그래서 운영체제는 매번 어디에 적을지 결정해야한다. 어떨 떄는 메모리가 꽉차서 공간이 없을 수도 있다. 이럴때도 운영체제는 체계적으로 메모리를 관리해야한다.
- 입출력장치가 CPU에 하드웨어 인터럽트 요청 신호를 보내면 CPU는 하던 일을 잠시 백업한 뒤 커널 영역에 있는 인터럽트 서비스 루틴을 실행한다.
파일 시스템 관리
우리는 컴퓨터를 사용할때 여러파일을 열고, 생성하고, 삭제하곤한다. 그리고 이 파일을 폴더로 관리한다.
이런 파일 시스템도 운영페제가 지원하는 서비스이다!
2.4 가상머신
가상머신이란 이름 그대로 소프트웨어적으로 만들어낸 가상 컴퓨터이다.
가상머신을 설치하면 새로운 운영체제와 웅용 프로그램을 설치하고 실행할 수 있다. 가상머신을 설치하면 이 또한 웅용 프로그램이다.
하지만 이렇게되면 운영체제 서비를 받기 어려워진다.
그래서 가상화를 지원하는 CPU는 커널모드와 사용자모드 의외에 가상 머신을 위한 모드인 하이퍼바이저 모드를 따로 둔다.
이렇게 가상머신에서 작동하는 응용프로그램들은 하이퍼바이너 모드로써 가상 머신에 설치된 운영체제로부터 운영체제 서비스를 받을 수 있다.
2.5 시스템 호출
프로세스관리
- fork() : 새 자식 프로세스 생성
- execve() : 프로세스 실행 (메모리 덮어쓰기)
- exit() : 프로세스 종료
- waitpid() : 자식 프로세스가 종료할 때까지 대기
파일관리
- open() : 파일 열기
- close() : 파일 닫기
- read() : 파일 읽기
- write() : 파일 쓰기
- stat() : 파일 정보 획득
디렉터리 관리
- chdir() : 작업 디렉터리 변경
- mkdir() : 디렉터리 생성
- rmdir() : 비어있는 디렉터리 삭제
파일 시스템 관리
- mount() : 파일 시스템 마운트
- umount() : 파일 시스템 마운트 해제
*마운트 : 물리적인 장치를 특정 위치 즉 디렉터리에 연결시켜주는 것
'공부 > 운영체제' 카테고리의 다른 글
[ 운영체제 ] 가상 메모리 (0) | 2023.02.15 |
---|---|
[ 운영체제 ] 교착상태 (0) | 2023.02.08 |
[ 운영체제 ] 프로세스 동기화 (0) | 2023.02.08 |
[ 운영체제 ] CPU 스케줄링 개요 (0) | 2023.01.25 |
[ 운영체제 ] 프로세스와 스레드 (0) | 2023.01.17 |