OS. 2. 컴퓨터 시스템과 운영체제
컴퓨터 시스템과 하드웨어
컴퓨터 시스템의 범위
- 응용프로그램 층
- 운영체제 층
- 컴퓨터 하드웨어 층
컴퓨터 시스템 계층 구조의 특징
- 사용자는 응용프로그램 / 도구 프로그램을 통해 컴퓨터 사용
- 하드웨어는 모두 운영체제의 베타적 독점을 지배 받는다.
- 사용자나 응용프로그램의 하드웨어의 직접 접근 불허
컴퓨터 하드웨어 설명
- CPU: 중앙처리 장치 (프로그램 코드 및 기계 명령을 해석하여 실행한다.), 전원이 공급될 작동 시작, 메모리에 적재된 프로그램을 실행
- 메모리: CPU에 의해 실행되는 프로그램 코드와 데이터가 적재되는 공간
- 캐시 메모리:
- CPU 처리 속도가 메모리 속도에 비해 빠르게 향상 -> CPU는 느린 메모리 때문에 대기 시간 늘게 되었음
- 이를 해결하기 위해, CPU와 메모리 사이에 설치되는 소량의 빠른 메모리, 고가의 메모리
- on-chip 캐시 : CPU 내부에 설치되는 캐시 메모리
- off-chip 캐시: CPU 외부에 설치되는 캐시 메모리
- 캐시 메모리가 있는 경우 CPU는 캐시 메모리에서만 프로그램 실행 (실행하고자 하는 프로그램과 데이터는 먼저 메모리에서 캐시로 옮겨져야 함)
- 장치 : 키보드, 스캐너, 프린터 등
- 버스 : 하드웨어들이 데이터를 주고 받기 위해 0 과 1의 디지털 신호가 지나다니는 여러 가닥의 선을 다발로 묶어 부르는 용어
- 버스의 종류:
- 주소 버스: 주소 신호가 지나다니는 버스
- 데이터 버스: 데이터 신호가 지나다니는 버스
- 제어 버스: 제어 신호가 지나다니는 버스
- 버스의 종류:
- 주소 : 메모리나 입출력 장치나 저장 장치 내에 있는 저장소 (레지스터들)에 대한 번지, CPU는 메모리나 입출력 장치에 값을 쓰거나 읽을 때 반드시 주소를 발생시킴
컴퓨터 하드웨어 구성
- 시스템 버스
- CPU나 메모리, 캐시 메모리 등 빠른 하드웨어들 사이에 신호 전송
- 고속도로에 비유
- 입출력 버스
- 상대적으로 느린 입출력 장치들 사이에 주고 받는 입출력 데이터 신호 전송
- 일반 도로에 비유
입출력 제어 장치 및 시스템 제어 회로
- 입출력 장치들을 제어하기 위한 여러 하드웨어 회로
- 입출력 장치에게 명령을 하달
- 메모리와 입출력 장치 사이에 혹은 CPU와 입출력 장치 사이에 데이터가 전달 중계
- DMAC, 인터럽트 제어장치 등 포함
CPU와 메모리 관계
- 32비트 CPU, 32 비트 운영체제, 32비트 컴퓨터
- CPU에 32개의 주소선
- CPU가 액세스하는 주소 범위 2^32 - 1 번지
- 32비트 CPU를 가진 컴퓨터에 4GB 이상 메모리를 달아도 소용없음
- CPU에 입출력되는 32개의 데이터 선 (32비트는 4개의 주소)
- CPU 레지스터들
- PC (Program Counter) - 다음에 실행할 명령의 메모리 주소 저장
- IR (Instruction Register) - 현재 실행하기 위해 메모리에서부터 읽어 온 명령 저장
- SP (Stack Pointer) - 스택의 톱 메모리 주소 저장
- 데이터 레지스터들 - 연산에 사용될 데이터들을 저장
- 상태 레지스터 - CPU의 상태 정보나 인터럽트 금지 등의 제어 정보 저장
- 기타 여러 레지스터 - 페이지 테이블이 저장된 메모리 주소를 가르키는 레지스터 등
- 명령 사이클 (Instruction cycle)
- CPU가 하나의 명령을 실행하는 과정. CPU는 전원이 켜진 후 단순하게 명령 사이클 반복
1) CPU는 PC 레지스터의 주소값 (100) 을 주소 버스에 싣는다.
2) 메모리는 100번지에 저장된 데이터 (mov eax, [300]) 을 데이터 버스에 싣는다.
3) CPU는 데이터 버스에 담긴 바이너리 값들은 IR 레지스터에 저장, PC에 다음 번지로 수정한다.
4) CPU는 연산에 필요한 데이터를 읽기 위해 데이터의 주소 (300) 을 주소 버스에 싣는다.
5) 300번지에 있는 50의 값을 데이터 버스에 싣는다.
6) CPU는 데이터 버스로부터 50을 임시 데이터 레지스터에 저장된다.
7) CPU는 명령을 해석하고 명령 실행한다. 명령 실행 결과, 50이 eax 레지스터에 저장한다.
스택은 어디에 있는가?
- 프로그램이 실행되기 위해 운영체제에 의해 할당되는 4가지
- 코드 영역: 프로그램 코드 적재
- 데이터 영역: 전역 변수들이 전재
- 힙 영역: 동적으로 할당받을 데이터가 저장
- 스택 영역: 함수가 호출될 때 매개변수, 지역변수 등 저장
- 스택
- 메모리의 일부를 스택으로 사용하도록 할당된 공간
- 각 프로그램에게 자신만의 스택 공간이 존재
- CPU 의 SP 레지스터가 현재 프로그램의 스택 꼭대기 주소를 가르킴
컨텍스트 (Context)
- 프로그램이 실행 중인 일체의 상황 혹은 상황 정보
- 메모리
- 프로그램 코드와 데이터, 스택, 동적할당 받아 저장한 값
- CPU 레지스터들의 값
- PC에는 코드의 주소
- SP에는 스택의 주소
- 다른 레지스터는 이전의 실행 결과나 현재 실행에 사용될 데이터들
- 축소 정의: 현재 CPU에 들어 있는 레지스터의 값들
컨텍스트 스위칭
- 정의
- 현재 실행중인 프로그램의 컨텍스트 (CPU 레지스터들의 값)을 저장
- 다른 프로그램의 저장된 컨텍스트 (CPU 레지스터들의 값)를 CPU에 복귀
- 발생
- CPU가 현재 프로그램 실행을 중지하고 다른 프로그램을 실행할 때
프로그램 A의 컨텍스트 사례
프로그램 A에서 프로그램 B로 컨텍스트 스위칭
멀티 코어 CPU (Multi-core CPU)
- 2001년 IBM에 의해 Power PC라는 멀티코어 CPU 개발
- CPU 내부에 2개의 프로세서 포함
- 2개의 프로그램을 동시에 실행
- 코어는 완벽한 처리기, 과거 개념의 CPU
운영체제 구성
운영체제 : 커널 + 툴 + 디바이스 드라이버로 구성
- 커널 : 운영체제의 핵심, 좁은 의미의 운영체제
- 부팅 후 메모리에 상주하는 코드와 데이터
- 커널 코드는 함수들의 집합의 구성
- 커널 기능을 이용하려면 응용프로그램은 반드시 시스템 호출을 사용
- 도구 소프트웨어와 UI
- 사용자가 컴퓨터를 편리하게 사용할 수 있도록 제공하는 툴 소프트웨어 혹은 툴 응용 프로그램
- 바탕화면 GUI, 탐색기, 작업관리자, 명령창, 제어판, 쉘, 로그인 프로그램 등
- 디바이스 드라이버
- 장치를 직접 제어하고 입출력하는 소프트웨어
- 장치마다 전담 디바이스 드라이버 있음
- 일반적으로 장치 제작자에 의해 작성되어 배포됨
- 키보드 드라이버, 디스크 드라이버, 마우스 드라이버, 그래픽 드라이버 등
운영체제 커널 인터페이스 : 시스템 호출과 인터럽트
- 커널이 제공하는 2개 인터페이스 : 시스템 호출, 인터럽트
- 시스템 호출 : 일반 응용프로그램에서 커널 기능을 사용할 수 있는 유일한 방법, 표준 라이브러리안에서 사용되는 것과 시스템 호출 라이브러리를 통해 호출
- 인터럽트 : 커널과 하드웨어 사이의 인터페이스
- 장치들의 입출력이 완료되었을 때 CPU에게 알리는 하드웨어적 방법
- 인터럽트가 발생하였을 때 CPU가 하던 일을 멈추고 인터럽트 서비스 루틴이 실행되어 완료되면, 다시 CPU가 하던 일을 진행
- 인터럽트 서비스 루틴 : 커널이 적재된 메모리 영역에 있는 코드, 일반적으로 디바이스 드라이버 내에 있음
- 활용 : 운영체제가 장치에게 지시한 입출력 작업의 완료, 예고 없는 네트워크 데이터의 도착, 키보드나 마우스 입력, 부족한 배터리 경고 등 장치와 관련된 모든 이벤트 처리
커널과 시스템 호출
- 오늘날 운영체제는 시분할 (다중프로그래밍) 운영체제 사용
- 문제 : 커널 영역 침범, 다른 응용프로그램의 메모리 및 파일 등 컴퓨터 자원에 접근하여 훼손 및 충돌 발생
- 해결책: 커널 영역과 사용자 영역으로 분리, 응용 프로그램이 커널 영역에 침범할 수 없음 (시스템 호출 제외), CPU의 실행 모드를 커널 모드와 사용자 모드로 분리
사용자 공간 크기
- 한 응용 프로그램의 최대 크기 : 코드 + 데이터 + 힙 + 스택 영역
- 예 : 32비트 Windows 운영체제에서 사용자 공간 2GB -> 응용 프로그램의 최대 크기 2GB
- 응용프로그램은 운영체제가 설정한 사용자 주소 공간의 범위를 넘을 수 없음
사용자 모드와 커널 모드
CPU의 모드는 하나의 모드만 실행
- 사용자 모드 (user mode) :
- CPU의 모드 비트 : 0
- CPU는 사용자 공간에 있는 코드나 데이터를 액세스
- CPU는 커널 공간 접근 불허 - 응용 프로그램으로부터 커널 영역 보호
- 특권 모드 실행 불허
- 커널 모드 (kernel mode, supervisor mode) :
- CPU의 모드 비트 : 1
- CPU가 커널 공간에서 실행하는 중, 혹은 사용자 코드를 실행하는 중
- 특권 명령 사용 가능
사용자 모드에서 커널 모드로 변경되는 경우 : 시스템 호출과 인터럽트 발생의 2가지 경우
특권 명령 : 커널 모드에서 실행할 특별한 목적으로 설계된 CPU 명령
특권 명령 종류 :
- I/O 명령, Halt 명령, 인터럽트 플래그 켜고 끄는 명령, 타이머 설정 명령, 컨텍스트 스위칭 명령, 메모리 지우기 명령, 장치 상태 테이블수정 등의 명령
함수 호출과 시스템 호출
운영체제와 인터럽트
인터럽트 : CPU가 현재 일을 중단하고 다른 일을 하도록 시키는 비동기적 방법
- 하드웨어 인터럽트
- 하드웨어 장치가 어떤 상황 발생을 CPU에게 알리는 하드웨어 신호
- 인터럽트 발생 -> CPU는 인터럽트 서비스 루틴 실행
- 소프트웨어 인터럽트
- CPU 명령어에 의해 하드웨어 인터럽트를 수신한 것과 동일한 처리
- 인터럽트의 효과
- CPU 활용률 증가, 시스템 처리율 향상