안녕하세요 조엘입니다! 운영체제 1단원에 대해 공부해 보았습니다.
Abraham Silberschatz의 Operating System Concepts 10th edition과 학부 수업을 듣고 정리한 내용입니다. 오개념이 있다면 알려주세요~~
<운영 체제는?>
사용자 관점: 사용의 용이성을 높여준다. 자원의 이용에는 신경 쓰지 않게 해준다.
시스템 관점: 컴퓨터 하드웨어의 자원 할당, 유저 프로그램의 제어를 담당한다.
운영 체제는 항상 실행 중인 커널과 커널의 일부는 아니지만 OS와 관련된 시스템 프로그램(쉘, 컴파일러, 디버거 등등)으로 이루어져 있다.
<커널은?>
운영 체제의 심장이자, 운영 체제를 규정 짓는 매우 중요한 부분!
HW의 자원을 필요한 프로세스에 나눠주고, 프로세스 제어, 메모리 제어, 시스템 콜 수행 등 운영체제의 맨 하부에서 돌아가게 된다. 현재 쓰이는 OS들이 커널 위에 여러 가지 레이어를 올린 것.
참조: namu.wiki/w/%EC%BB%A4%EB%84%90(%EC%9A%B4%EC%98%81%20%EC%B2%B4%EC%A0%9C)
<인터럽트>
입출력 장치와 CPU는 동시에 실행이 가능하다. 지금 이렇게 포스팅을 작성하고 있지 않은가! 각 장치 컨트롤러는 새로운 이벤트가 발생하면 CPU에게 이벤트 발생을 알리게 되는데, 이를 인터럽트라고 한다. 이는 운영체제와 HW사이의 상호 작용 방식의 핵심이다.
SW에서 발생하는 인터럽트도 있는데, trap과 exception이 바로 그것이다.
Trap은 system call 같이 유저 모드에서는 사용할 수 없는 OS 서비스를 사용하기 위한 요청이다.
Exception은 division by zero같은 SW 에러이다.
CPU가 인터럽트 되면, CPU는 하던 일을 중단하고 즉시 고정된 위치로 실행을 옮긴다. 인터럽트 서비스 루틴이 실행되고, 실행 완료 후 CPU는 중지 되었던 연산을 재개한다.
구현은 다음과 같다. CPU에는 인터럽트 요청 라인이 있다. 인터럽트 요청 라인에 신호가 왔음을 감지하면, 인터럽트 번호를 읽고, 이 번호를 인터럽트 벡터의 인덱스로 사용하여 인터럽트 핸들러 루틴으로 점프한다. 그 후 해당 인덱스에 관한 처리를 진행해준다.
따라서 CPU가 순차적으로 instruction을 수행하고 있을 때, interrupt가 발생하면, 잠시 CPU는 잠시 수행하던 instruction을 접어두고 해당 interrupt에 대한 처리를 진행하게 된다.
또한 이는 매우 빈번하게 일어나기 때문에 빠른 처리가 필수적이다!
<운영 체제 시작 방법>
CPU는 메모리에서만 명령을 가져올 수 있다. 처음 부팅할 때에는 운영체제는 어디에 있던걸까? RAM은 아닐텐데!
컴퓨터를 킬 때 가장 먼저 실행되는 프로그램은 부트스트랩 프로그램으로, 운영체제를 메모리에 적재하게 된다.
RAM은 휘발성이기 때문에 부트스트랩을 유지시킬 수 없고, EEPROM/ROM 에서 부트스트랩을 저장하고 있다.
따라서 컴퓨터를 키면 다음과 같은 일이 일어난다. (버튼 하나 눌렀을 뿐인데, 컴퓨터는 바쁘다!)
전원 버튼을 누르면, 컴퓨터 HW내 펌웨어에 있던 부트스트랩 프로그램이 실행되게 되고, 컴퓨터 시스템이 모두 초기화 된 후에, OS 커널이 메모리에 적재가 되게 되고, 시스템과 사용자에게 서비스를 제공할 수 있게 된다!
<컴퓨터 시스템의 구조>
Core: L1 캐시를 갖는 논리적 연산 장치로써, 독자적으로 프로그램/쓰레드 운용 가능
Single processor systems: 단일 프로세서, 단일 처리 코어로 이루어져 있다. 요즘에는 거의 안 쓰인다.
Multiprocessor systems: 병렬 시스템으로 많은 처리를 가능하게 한다. 두 가지 형태로 나눌 수 있는데,
AMP: 각 프로세서가 특정한 task를 수행, Master-Slave 구조
SMP: 모든 프로세서가 동일하고, 어떤 일이라도 동일하게 수행 가능 (요즘 가장 많이 쓰임)
Multicore systems: 프로세서 하나에 여러 코어를 포함 시킬 수 있다. 운영체제 입장에서는 N개의 코어는 N개의 프로세서로 인식한다.
UMA: 모든 코어가 모든 메모리 모듈에 같은 access time을 갖는다.
NUMA: 코어들이 다른 메모리 모듈에 다른 access time을 갖는다.
<듀얼 모드>
OS는 듀얼모드로 운용된다. 유저모드와 커널모드로 나뉜다. 이 둘을 구분하는 이유는 유저 프로그램이 함부로 컴퓨터 자원에 접근하는 것을 막기 위해서이다!
유저 모드(mode bit-1): 우리가 주로 만드는 프로그램들로, 제한된 연산만 수행 가능
커널 모드(mode bit-0): 컴퓨터의 모든 연산과 자원에 접근 가능하다.
<자원 관리>
운영 체제는 컴퓨터의 자원 관리를 해줘야 한다. 대표적으로 다음과 같은 자원을 관리해준다.
Process Management
프로세스는 실행 중인 프로그램이다. 프로세스를 돌리기 위해서는 CPU, memory, I/O, file이 필요하다. 또한 어떤 instruction을 수행 중인지 저장할 program counter가 필요하다. Program counter는 쓰레드별로 1개 씩 필요하다.
Memory Management
여러 프로그램을 유지하기 위해서는 메모리 관리기법이 필수적이다. 메모리의 어느 부분을 어느 프로세스가 사용 중인지, 필요에 따라 메모리 공간을 할당하고 회수하고, 어떤 프로세스를 메모리에 적재하고 회수할건지를 OS가 정하게 된다.
File-System Management
컴퓨터 시스템의 편리한 사용을 위해, 운영체제는 정보 저장장치에 대해 균일한 논리적 관점을 사용한다. 운영 체제는 저장 장치의 물리적 특성을 추상화하여 논리적인 저장 단위인 파일을 정의한다. 파일은 디렉토리로 정돈되어 있고, OS는 이를 생성/제거/백업/매핑 등 관리 업무를 진행한다.
'컴퓨터 공학 > 운영체제' 카테고리의 다른 글
Chapter 5. CPU 스케줄링 - 1부 (0) | 2020.10.16 |
---|---|
Chapter 4. 스레드와 병행성 (0) | 2020.09.17 |
Chapter 3. 프로세스 - 2부 (0) | 2020.09.17 |
Chapter 3. 프로세스 - 1부 (0) | 2020.09.17 |
Chapter 2. 운영체제 구조 (0) | 2020.09.13 |
댓글