컴퓨터 시스템과 운영체제
· 컴퓨터 시스템의 범위
- 응용소프트웨어 <- 운영체제(Agent[중계자] 역할) -> 컴퓨터 하드웨어
· CPU(중앙처리장치: Central Processing Unit)
- 실제 프로그램 코드를 실행하는 장치
· 캐시 메모리(Cache Memory)
- CPU와 메모리의 속도 차이로 인한 병목현상을 완화하기 위해 등장
- 옵칩 캐시(off-chip cache): CPU의 외부에 두는 캐시 메모리
- 온칩 캐시(on-chip cache): CPU에 내장된 캐시 메모리
· 메모리(Memory)
- CPU에 의해 실행되는 프로그램의 코드와 데이터가 적재되는 공간
· 버스(Bus)
- 하드웨어에서 0, 1의 2진 신호가 지나가는 선
- 주소 버스, 데이터 버스, 제어 버스
만약 CPU가 32개의 주소선을 갖고 있다면, CPU가 메모리에 접근(access) 가능한 범위는 2^32 = 2^30 * 2^2 = 4GB, 즉, 4GB 이상의 메모리는 활용 불가
- 시스템 버스(System bus): 고속도로, 빠른 데이터들을 전송하기 위한 버스
- 입출력 버스(I/O bus): 일반도로, 비교적 느린 I/O 데이터를 전송하기 위한 버스
· 주소(Address)
- 메모리나 레지스터들에 대한 번지, 0번지에서 시작
· 레지스터(Register) ~ Context
- PC: 다음에 실행할 명령의 메모리 주소를 저장하는 레지스터
- IR: 실행해야 할 명령이 저장된 레지스터
- SP: 스택 영역의 꼭대기 메모리 주소를 저장하는 레지스터
· 컨텍스트(문맥: Context)
- 어떤 프로그램이 실행중인 일체의 상황, 한글로는 문맥을 뜻함
- 메모리는 그대로 있기 때문에 현재 CPU에 들어 있는 레지스터의 값들이 바로 컨텍스트
· 컨텍스트 스위칭(Context Switching)
- 현재 실행중인 프로그램의 컨텍스트를 메모리에 저장(back up)해두고, 다른 프로그램 B를 실행시키기 위해 프로그램 B에 저장된 컨텍스트를 CPU로 옮기는 것
· 시스템 호출(System Call)
- 사용자 공간의 코드에서 커널 공간의 코드를 호출하는 과정
- 응용 프로그램에서 커널 기능을 활용하는 유일한 방법
- 시스템 호출 CPU 명령(트랩)이 실행되면 CPU는 사용자 모드를 커널 모드로 바꾸고 시스템 호출 핸들러로 점프하여 실행을 시작
· 커널 디바이스 드라이버
- 장치를 제어하고 입출력을 수행하는 소프트웨어(프린터, 키보드 드라이버) / 커널 공간에 있음
- 장치 하드웨어를 제작하는 곳에서 일반적으로 작성하고 배포
- 장치와 커널 사이의 agent 역할을 하며 커널 코드가 장치와 무관하게 작성되고 운용될 수 있도록 해주는 일종의 라이브러리 역할을 함
· 표준 라이브러리
- 복잡한 기능을 미리 작성해서 응용프로그램을 개발자(사용자)가 쉽게 작성할 수 있도록 제작된 함수의 집합
- ex: printf() 함수
· 시스템 호출 라이브러리
- 응용프로그램에서 fork(), exit(), open(), write() 등 함수를 사용해서 커널 코드(커널 함수)를 활용할 수 있도록 하는 유일한 방법
· 응용프로그램(시스템 호출을 사용해서 커널 코드에 접근)
- 응용프로그램은 우리와 같은 개발자(사용자)가 만든 프로그램 / 커널 코드에 접근하는 유일한 방법 = 시스템 호출(system call)
- 운영체제는 사용자 공간에 응용 프로그램을 적재, 커널 공간에 커널 코드를 적재 ~ 나누는 이유: 커널 코드와 커널 데이터를 지키기 위해서
· 가상 주소
- 사용자 공간과 커널 공간은 가상 주소 공간
- 가상 주소 공간에서 각 응용프로그램마다 시작 주소가 0번지인데, 충돌을 막기 위해 매핑 테이블을 활용하여 물리 메모리 공간으로 매핑시켜 해결
- 물리 메모리가 부족하게 되면 물리 메모리의 일부를 하드 디스크에 저장하여 공간을 확보하는 가상 메모리 기법을 사용
· 인터럽트
- 입출력 장치나 저장장치들이 비동기적인(예측 불가능한) 어떤 사건(event)이 발생했다는 것을 CPU에게 알리는 하드웨어적인 방법
- 인터럽트가 발생되면 인터럽트 제어기(APIC)가 신호를 받아 인터럽트 벡터 번호N을 CPU에 전달함, 그 이후 CPU는 인터럽트 벡터 테이블에서 인터럽트 N의 서비스 루틴(ISR)의 주소를 알아내고 인터럽트 서비스 루틴을 실행
- 인터럽트 벡터 테이블: 커널 영역에 있는 256개의 ISR의 주소를 저장하고 있는 테이블
· 주소 공간
- 자원에 대한 모든 접근은 커널에만 부여하여 커널 코드와 데이터를 지키기 위해 메모리의 주소 공간은 사용자 공간과 커널 공간으로 나뉨
- 사용자 공간 = 응용 프로그램 / 커널 공간 = 커널 코드 + 커널 데이터
· 사용자 공간
- 응용프로그램이 적재되고 프로그램의 변수가 만들어지며 동적 할당 받는 공간으로 활용하는 공간
· 커널 공간
- 커널 코드와 커널 데이터. 커널 함수들이 실행될 때 필요한 스택 공간, 디바이스 드라이버 등이 탑재되는 공간
· 사용자 모드
- 모드 비트 1 / 특권 명령 제외한 모든 CPU 명령 처리 가능 / 커널 공간 접근(읽기 및 쓰기, 실행) 불가 / 하드웨어 접근 불가
· 커널 모드(특권 모드, 감독자 모드)
- 모드 비트 0 / 특권 명령 포함한 모든 CPU 명령 처리 가능 / 커널 공간 접근 가능 / 모든 하드웨어 액세스 가능
· 특권 명령
- I/O 명령, 타이머 설정, 인터럽트 처리, 시스템 중단(halt), 인터럽트 플래그 켜고 끄기, 컨텍스트 스위칭 등 특별한 목적으로 설계된 CPU 명령으로 커널 모드에서만 사용 가능
'Development' 카테고리의 다른 글
[OS] 임계 구역 문제(The Critical-Section Problem) (0) | 2023.10.19 |
---|---|
[OS] 프로세스와 프로세스 관리 (1) | 2023.10.18 |
[OS] 운영체제의 시작과 발전 (1) | 2023.10.16 |
[Development] 메소드 오버로딩과 메소드 오버라이딩 (1) | 2023.10.05 |
[Development] 클래스, 객체, 인스턴스 (0) | 2023.09.26 |