[OS] 컴퓨터 시스템과 운영체제

PSLeon ㅣ 2023. 10. 17. 11:52

반응형

컴퓨터 시스템과 운영체제

· 컴퓨터 시스템의 범위

-  응용소프트웨어 <- 운영체제(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 명령으로 커널 모드에서만 사용 가능