본 글은 (KOCW) 운영체제, 이화여자대학교 반효경 교수님의 강의를 듣고 내용을 요약 및 정리했습니다.
스터디를 진행하는 것에 목적이 있으며, 자세한 사항은 여기를 참고하시면 됩니다.
컴퓨터 시스템의 구조
- 내부 장치(Host): CPU, Memory
- 외부 장치(I/O Device): 하드디스크, 키보드, 마우스, 프린터, 모니터
- CPU (Central Processing Unit 중앙처리장치)
- 입력받은 명령을 해석/연산 후 결과 값을 출력 장치로 전달한다
- CPU 내부의 PC(Program Counter) 레지스터가 가리키고 있는 메모리 주소에 위치한 Instruction을 실행
- CPU에 대한 통제는 OS의 역할
- Memory(주 기억장치)
- CPU가 처리할 데이터나 명령어가 임시로 저장되는 곳으로 CPU의 작업공간 역할
- CPU는 매 클럭 사이클마다 메모리로부터 기계어로 작성된 Instruction을 읽어서 실행
- 작업을 할 때 디스크에 있는 데이터는 먼저 메모리로 이동된 다음 CPU로 전송
- CPU가 메모리에 저장되어 있는 용량만큼 프로그램을 작동
- Disk(보조기억장치)
- I/O Device를 칭함
- 디스크 정보를 메모리로 읽어 들이는 Input Device의 역할, CPU의 처리 결과를 디스크의 파일 시스템에 저장하는 Output Device로서의 역할을 동시에 수행
- Device Controller
- 각각의 I/O Device마다 Device Controller가 있는데, 내부 동작을 제어하는 일을 맡는 작은 CPU라고 할 수 있다
- Local Buffer라는 일종의 data register를 가지고 있어 I/O로부터 들어오고 나가는 데이터를 임시 저장할 수 있음
- 데이터는 Local Buffer, 제어 명령은 register에 담는다
- CPU의 요청을 I/O device에 전달하고 처리가 완료되면 인터럽트를 발생시킨다
- Device Driver?
- OS 코드 중 각 장치별 루틴 -> 소프트웨어
- Device Controller에 명령을 전달하기 위해선 드라이버를 설치해야 한다
- Device Controller에서 실행되어야 할 명령은 펌웨어에 있음
- Register
- 메모리보다 더 빠르면서 정보를 저장하는 CPU 내부 공간
- Mode Bit
- 다중 프로그램이 실행되는 환경에서는 프로그램들 간의 침범이 발생하면 안 되기 때문에 하드웨어에 대한 각종 보안 기법이 필요
- 사용자 프로그램에서 보안 문제가 발생할 수 있기에 제한해야 한다
- 보안을 유지하기 위해 두 가지 운영체제 모드(사용자 모드, 커널 모드)를 지원
- 1: 사용자모드 - CPU 제어권이 사용자 프로그램에 있음
- 0: 커널 모드 - CPU 제어권이 운영체제에 있음
- 커널 모드일 때는 메모리뿐 아니라 I/O Device등에 대한 접근이 가능
- 사용자 모드일 때는 자원에 대한 제한적인 접근만 가능
- CPU 내부의 Mode bit를 통해 현재 실행되고 있는 운영체제가 어떤 모드인지를 구별하여 모드에 따라 실행 권한을 제어
- 다중 프로그램이 실행되는 환경에서는 프로그램들 간의 침범이 발생하면 안 되기 때문에 하드웨어에 대한 각종 보안 기법이 필요
- Interrupt
- CPU는 수시로 Interrupt line을 통해 인터럽트 발생 여부를 확인
- Instruction을 읽고 수행하기만 하는 CPU -> 다른 요청이 필요, 종료됐음을 알리기 위해 Interrupt line이 있는 것
- 인터럽트가 들어올 경우 CPU 제어권은 자동으로 운영체제에 넘어가고, CPU는 우선순위에 따라 인터럽트를 처리
- CPU는 수시로 Interrupt line을 통해 인터럽트 발생 여부를 확인
- Timer
- 특정 프로그램이 CPU를 독점하는 일을 막는 역할
- 세팅된 시간이 종료되면 타이머는 인터럽트를 발생시켜 CPU제어권이 자동으로 프로그램에서 운영체제로 넘어감
- 사용자로부터 접근, 권한을 제어하기 위해 Mode bit을 사용했으나 계속 CPU를 점유하는 것을 막지는 못하기 때문에 타이머를 사용하여 무한루프와 같은 오랜 점유를 막을 수 있음
- 시분할 처리방식을 위한 장치이며 무한루프와 같은 소프트웨어 오류 상황을 회피하기 위한 장치
- DMA Controller(Direct Memory Access)
- I/O Device로부터 들어온 인터럽트를 처리해 CPU 성능 저하를 막음
- CPU의 중재없이 I/O Device의 로컬 버퍼에 접근하여 저장된 데이터를 Block 단위로 메인 메모리에 복사(전송)하는 작업을 함
- 인터럽트 역시 Byte가 아닌 Block 단위로 발생시키기 때문에 많은 I/O 인터럽트로 인해 CPU 성능이 떨어지는 것을 예방
- 메모리에 데이터를 block 단위로 전송한 뒤 전송이 완료되면 인터럽트를 발생시켜 CPU에 알린다
- 잦은 전송 요청에 대해 매 번 인터럽트를 걸고 OS에서 CPU를 얻고 작업하는 것이 아니라 메모리에 직접 전달하고 전부 전달한 후 인터럽트로 CPU에 작업을 요청
입출력의 수행
- 사용자 프로그램은 직접적으로 I/O Device에 접근할 수 없어 운영체제에 요청
- 시스템콜
- 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
- 사용자 프로그램이 운영체제에게 I/O 요청 -> 소프트웨어적으로 인터럽트를 걸 수 있다 -> CPU 제어권을 넘길 수 있음
- CPU를 운영체제에 전달하고, I/O 요청이 올바른 요청인지 확인 후 Device Controller에 전달
- 시스템콜
인터럽트
CPU가 다른 프로그램을 실행하고 있을 때 입출력 하드웨어 혹은 소프트웨어에 의해 예외 상황이 발생하여 처리가 필요한 경우 CPU에 이를 알려주는 것을 말함
- Hardware Interrupt
- I/O Device Controller로부터 발생한 인터럽트 (명령 수행이 완료되었다 등)
- 타이머 인터럽트
- Trap (Software Interrupt)
- Exception: 프로그램 오류로 인해 발생하는 인터럽트
- System Call: 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 경우 발생하는 인터럽트
I/O 처리 시에는 Hardware Interrupt와 Software Interrupt가 모두 발생
프로그램이 I/O를 요청할 때 OS에 System call을 하고, I/O 처리가 끝난 뒤에는 Device cotroller가 Hardware Interrupt를 발생시키기 때문
현대의 운영체제는 인터럽트에 의해서 구동된다고 할 수 있다
인터럽트가 발생할 때에만 CPU가 운영체제로 넘어가고 그 외에는 사용자 프로그램이 CPU를 점유하기 때문
Interrupt 관련 용어
- 인터럽트 벡터
- 해당 인터럽트의 처리 루틴 주소(핸들러)를 가지고 있다
- 특정 인터럽트가 발생했을 때 실행해야 할 함수의 위치 주소를 정의해 놓은 테이블이라고 할 수 있다
- 인터럽트 처리 루틴 (Interrupt Service Routine, 인터럽트 핸들러)
- 인터럽트 서비스 루틴, 인터럽트 핸들러라고도 한다
- 해당 인터럽트를 처리하는 커널 함수를 말한다
동기식 입출력과 비동기식 입출력
동기식 입출력 (synchronous I/O)
- 운영체제(커널)에 I/O 요청 후 입출력 작업이 완료된 후에야 CPU 제어권이 사용자 프로그램에 넘어감
- 주로 입출력 처리에 의해 생성된 결과를 사용해야 하는 경우 활용
- 구현방법 1
- I/O가 끝날 때까지 프로세스가 CPU를 가지고 있는 방법으로 CPU를 낭비함
- 구현방법 2
- I/O가 완료될 때까지 다른 프로그램에게 CPU를 주는 방법
비동기식 입출력 (asynchronous I/O)
- 운영체제(커널)에 I/O 요청만 해놓고 CPU 제어권을 즉시 돌려받아 다른 작업을 수행
- 입출력 작업이 끝날 때까지 기다리지 않음
- I/O가 완료되기 전에 다른 instruction을 실행하는 것 -> 비동기식, 구현방법2(동기식)과 다르다
동기식, 비동기식 모두 I/O 처리가 완료됐음을 인터럽트로 알려줌
서로 다른 입출력 명령어
- I/O를 수행하는 special instruction에 의해
- Memory Mapped I/O에 의해
- (좌) 일반적인 I/O 처리 방법
- 메모리상에 I/O 처리를 위한 별도의 instruction이 존재 해당 instruction을 실행하여 I/O 처리를 할 수 있다
- (우) Memory Mapped I/O
- I/O 처리를 위한 instruction을 메모리주소의 연장선상에 놓는 방법
저장장치 계층 구조
상위로 갈수록 처리 속도가 빠른 매체를 사용하며 단위 공간당 가격이 비싸기 때문에 용량이 적으며 비휘발성 -> 휘발성 특징이 있다.
- primary (Executable) 매체
- CPU에서 직접 접근할 수 있다
- CPU가 byte 단위로 읽고 실행할 수 있는 경우를 말함
- 휘발성 매체이기 때문에 전원이 꺼지면 저장된 데이터가 모두 지워진다
- secondary 매체
- CPU에서 직접 접근하여 실행할 수 없다
- 비휘발성 매체여서 전원이 꺼져도 데이터가 남아있다
- Caching(캐싱)
- secondary 매체로부터 primary 매체인 Cache memory에 데이터를 복사해 오는 것을 말한다
- 데이터의 재사용을 목적으로 한다
프로그램의 실행
컴퓨터 내부에서 프로그램이 실행되는 과정
메모리 로드
- 프로그램은 실행파일 형태로 하드 디스크의 파일 시스템에 저장
- 실행 파일을 실행시키면 프로그램이 메모리상에 올라가서 프로세스가 되는데, 이때 메모리에 즉시 올라가는 게 아니라 가상 메모리 단계를 거친다
- 가상 메모리 단계
- 프로그램을 실행하는 시점에 해당 프로그램만의 독자적인 Address Space(메모리상의 주소 공간)을 생성
- Address Space를 통째로 메모리에 올리는 것이 아니라, 필요한 부분만 물리적인 메모리에 올리며, 커널 영역이 항상 메모리상에 상주하는 것과는 달리 프로그램 실행이 끝나면 메모리상에서 지워짐
- 당장 필요하지 않은 부분은 디스크의 Swap Area에 보관
Swap area는 메모리의 연장선상에 위치하는 디스크 공간으로 메모리 용량을 보조하는 역할을 한다
메모리와 마찬가지로 휘발성이다(프로그램이 종료되면 의미 없는 공간이므로) 반면 디스크의 file system은 비휘발성 공간
-
- Address Space
- Stack - 함수를 호출하거나 리턴할 때 사용되는 영역
- Data - 변수 등 프로그램이 사용하는 자료구조를 담고 있는 영역
- Code - CPU에서 실행할 기계어 코드를 담고 있는 영역
- Address transition
- 가상 메모리 상의 주소를 물리적 메모리 상의 주소로 변환하는 것을 말하며, 하드디스크의 특정 장치가 이 역할을 담당(추후 가상 메모리에서 알아본다)
- Address Space
커널 주소 공간의 구성
커널 역시 하나의 프로그램이기 때문에 Address Space를 가지고 있음
- Code 영역
- 자원을 효율적으로 관리하고 사용자에게 편리한 인터페이스를 제공하기 위한 코드가 존재
- 인터럽트가 들어왔을 때 CPU 제어권이 운영체제에게 주어지기 때문에 각각의 인터럽트를 어떻게 처리해야 하는지를 명시해 놓은 코드가 있음
- Data 영역
- CPU, Memory, Disk 등의 하드웨어를 관리하기 위한 자료구조가 들어있음
- 각각의 프로그램을 관리하기 위한 자료구조(Process Control Block, PCB)도 포함됨
- Stack 영역
- 운영체제의 커널코드는 여러 사용자 프로그램의 요청에 따라 실행되기 때문에 사용자 프로그램마다 별도의 커널 스택을 가지고 있음
사용자 프로그램이 사용하는 함수
- 사용자 정의 함수
- 사용자가 프로그램에 정의한 함수
- 라이브러리 함수
- 다른 사람이 만든 함수이지만 프로그램의 실행 파일에 포함되어 있는 함수
- 커널 함수
- 운영체제 프로그램의 함수
- 커널 함수의 호출 => System Call
커널함수의 경우 프로그램 내의 함수가 아니고 커널코드에 포함된 함수이기 때문에 시스템 콜을 통해서 CPU 제어권을 넘겨야만 실행 가능
프로그램이 실행되는 단계
- 하나의 프로그램이 실행되는 동안 운영체제는 User Mode <-> Kernel Mode 전환을 반복한다 -> Mode bit
- 프로그램이 CPU 제어권을 가지고 있으면 User Mode -> System Call을 호출하게 되면 CPU 제어권이 커널로 넘어가면서 Kernel Mode가 되고 -> 커널의 주소공간에 있는 커널함수를 실행
정리
- 시스템 콜에 대해 설명해 주세요
- 시스템 콜이란 사용자 프로그램에서 운영체제 커널의 서비스를 받기 위해 인터럽트를 발생시키는 인터페이스를 말합니다
- 시스템 콜은 운영체제에서 어떤 과정으로 실행되나요?
- 사용자 프로그램에서 작업을 시행하는 중 File I/O가 필요한 작업이 발생했을 때 사용자 프로그램은 하드웨어에 접근할 수 없는 User Mode 상태이므로 운영체제에 이를 사용할 수 있도록 요청을 해야 합니다. 이때 시스템 콜을 호출하여 운영체제에 인터럽트를 발생시킵니다 운영체제에서 사용자 프로그램이 File I/O 작업을 수행해도 되는지 권한을 확인한 후 Kernel Mode로 전환하여 I/O 작업을 수행합니다. I/O 작업이 완료되면 CPU의 제어권을 획득한 뒤 I/O 작업을 수행한 후 작업이 완료되면 결과를 반환하며 다시 User Mode로 전환되는 실행과정을 거칩니다.
- 왜 유저모드와 커널모드를 구분해야 하나요?
- 다중 프로그램들 간의 침범이 발생할 수 있기 때문에 사용자 프로그램에서 하드웨어에 접근하지 못하도록 제한하기 위함과 사용자 프로그램에서의 보안 문제가 발생할 수 있기 때문에 시스템의 안전성과 보안 측면 때문에 구분하게 되었습니다.
- 인터럽트에 대해 설명해 주세요
- 인터럽트란 CPU가 다른 프로그램을 실행하고 있을 때 입출력 하드웨어 혹은 소프트웨어에 의해 예외 상황이 발생하여 처리가 필요한 경우 CPU에 이를 알려주는 것을 말합니다
- SW, HW 인터럽트에 대해 설명해 주세요
- SW인터럽트는 사용자 프로그램에서 발생하는 인터럽트로 프로그램에서 발생한 예외 상황 Exception 혹은 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 System Call이 이에 해당합니다
- HW 인터럽트는 I/O Device Controller에서 발생하는 인터럽트로 I/O 작업의 완료 등을 알리기 위한 인터럽트가 있습니다.
- CPU의 역할은 무엇일까요?
- 입력받은 명령을 해석/연산 후 결과 값을 출력 장치로 전달하는 역할을 하며 명령이 완료되었음을 Interrupt line으로 구분합니다 다음 명령은 PC 레지스터를 통해 메모리 주소에 위치한 명령을 실행하며 명령 실행, 인터럽트 처리를 반복하는 역할을 합니다
- 동기식 입출력과 비동기식 입출력에 대해 설명해 주세요
- 동기식 입출력은 운영체제(커널)에 I/O 요청 후 입출력 작업이 완료된 후에야 CPU 제어권이 사용자 프로그램에 넘어가는 방식을 말하며 작업이 완료되길 기다리면서 CPU가 낭비되는 방식이지만 요청의 결과를 가지고 작업을 이어 해야하는 경우에 적합한 방식입니다
- 비동기식 입출력은 운영체제(커널)에 I/O 요청만 해놓고 CPU 제어권이 사용자 프로그램에 넘어가 작업을 이어서 진행하는 방식을 말합니다 I/O 작업의 결과를 가지고 작업을 이어서 하는 방식보다 대량의 입출력 처리, 병렬 처리에 적합한 방식입니다
- 컴퓨터 내부에서 프로그램이 실행되는 과정을 설명해 주세요
- 프로그램은 실행파일 형태로 파일 디스크에 저장되어 있습니다. 프로그램을 실행시키면 메모리에 올라가 프로세스가 되는데, 이때 메모리의 부하를 줄이기 위해 가상 메모리 단계를 거쳐 모든 데이터가 올라가는 것이 아니라 필요한 정보만 물리적인 메모리에 올리게 됩니다
- 가상 메모리는 독자적인 Address Space를 가지며 Stack, Data, Code 영역으로 나뉘며 당장 필요하지 않은 부분은 Swap Disk에 저장됩니다
- 프로그램이 종료되면 메모리상의 정보가 모두 지워집니다
- 커널 주소 공간에 대해 설명해 주세요
- 커널 주소 공간은 Code, Data, Stack영역으로 구성됩니다
- Code 영역에는 자원을 효율적으로 관리하고 사용자에게 편리한 인터페이스를 제공하기 위한 코드가 존재하며 인터럽트가 들어왔을 때 CPU 제어권이 운영체제에게 주어지기 때문에 각각의 인터럽트를 어떻게 처리해야 하는지를 명시해 놓은 코드가 있습니다
- Data 영역에는 CPU, Memory, Disk 등의 하드웨어를 관리하는 자료구조와 PCB를 저장하고 있습니다
- Stack 영역에는 사용자 프로그램마다 별도의 커널 코드 호출 스택이 저장되어 있습니다
'CS' 카테고리의 다른 글
OS - Program Management (0) | 2023.10.18 |
---|---|
OS - Process (0) | 2023.10.16 |
운영체제란? (0) | 2023.10.15 |
라우팅 (0) | 2023.10.12 |
TCP/IP 4계층 (0) | 2023.09.29 |