앞으로 KOCW 운영체제 반효경 교수님 이 수업을 들으면서 다시 정리하려고 한다. (+ 교재)
운영체제는 컴퓨터 하드웨어 바로 윗단에 설치되어 사용자 및 다른 소프트웨어와 하드웨어를 연결하는 소프트웨어이다.
운영체제의 전체가 메모리에 올라가지 않고 필요한 부분만 전원이 켜질 때 동시에 메모리에 적재되는데, 이때 메모리에 상주하는 운영체제의 부분을 커널(kernel)
이라고 한다.
효율성
), 특정 사용자 및 프로그램에게 지나친 불이익이 발생하지 않도록 관리(형평성
)자원은 하드웨어 자원과 소프트웨어 자원으로 나뉜다.
CPU는 일반적으로 한 대의 컴퓨터에 하나의 CPU가 존재하기 때문에, 여러 프로세스들이 CPU를 효율적으로 나누어 사용할 수 있도록 관리되어야 한다.
메모리도 한정된 용량안에서 사용할 수 있으므로 각각의 프로세스들이 나누어 사용할 수 있도록 관리해주어야 한다.
CPU와 메모리는 컴퓨터 전원이 꺼지면 정보가 모두 지워지므로 전원이 나가도 기억해야 하는 부분을 입출력 장치 중 한 종류인 보조기억장치(하드디스크)에 파일 형태로 저장하며 이러한 파일이 저장되는 방식, 접근 권한 등도 운영체제가 관리해야할 대상이 된다. 키보드, 모니터 등도 입출력 장치로 운영체제가 관리한다.
CPU를 가장 효율적으로 사용하면서 특정 프로세스가 불이익을 당하지 않도록 하는 것이 목표로, CPU 자원을 프로세스에게 할당하여 작업을 처리하도록 분배하는 것이다.
메모리는 CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억장치이다. 프로그램이 CPU에서 실행되려면 해당 부분이 메모리에 올라가 있어야 한다. 메모리 용량은 한정되어 있기 때문에, 여러 프로그램을 수용하려면 메모리에 대한 효율적인 관리가 필요하다.
운영체제는 메모리의 어느 부분이 어떤 프로그램에 의해 사용되고 있는지 파악해 이를 유지하게 되는데, 이러한 정보는 주소를 통해 관리된다. 따라서 운영체제는 각 프로세스가 자신의 메모리 영역에만 접근할 수 있도록 관리해야 한다.
고정 분할 방식: 물리적 메모리를 몇 개의 분할로 미리 나누어 관리
단점: 메모리에 동시 적재되는 최대 프로그램 수가 분할 개수로 한정되고, 분할 크기보다 더 큰 프로그램은 적재할 수 없어서 융통성이 없음(효율적이지 않음), 또한 분할 크기보다 더 작은 프로그램이 적재될 경우, 내부 단편화(internal fragmentation)이 발생하여 빈 공간이 비효율적으로 낭비
가변 분할 방식: 매 시점 프로그램의 크기에 맞게 메모리를 분할해서 사용하는 방식, 분할의 크기와 개수가 동적으로 변하므로 기술적인 관리 기법이 필요
장점: 분할 크기로 인해 큰 프로그램의 실행이 제한되는 문제는 발생하지 않음
단점: 물리적 메모리의 크기보다 큰 프로그램의 실행은 불가능, 프로그램에 할당되지는 않았으나 크기가 작아서 프로그램을 올리지 못하는 메모리 영역인 외부 단편화(external fragmentation) 문제 발생 가능
크기가 100인 프로그램 A가 실행되어 메모리에서 100만큼 할당받았고, 그 다음 크기가 50인 프로그램 B가 메모리 공간 50만큼 할당받아 실행되고 있다. 프로그램 A가 작업이 완료되어 A의 영역에 크기가 80인 프로그램 C가 적재되었다. 여기에서 20만큼 빈 공간이 생기게 된다. 이어서 크기가 40인 프로그램 D가 메모리에 적재되려고 하는데, 저 공간은 프로그램의 크기보다 작기 때문에 사용할 수 없는 공간이 되었다. 결과적으로 외부 단편화도 낭비된 메모리 자원이라고 볼 수 있다.
가상 메모리
: 가장 널리 사용되는 메모리 관리 기법, 물리적 메모리보다 더 큰 프로그램이 실행되는 것을 지원한다. 이 때 실행될 수 있는 프로그램의 크기는 가상메모리의 크기에 의해 결정된다.
모든 프로그램들은 물리적 메모리와는 독립적으로 0번지부터 시작하는 자신만의 가상메모리 주소를 갖는다. 운영체제는 이 가상메모리의 주소를 물리적 메모리 주소로 mapping하는 기술을 이용해 주소를 변환시킨 후 프로그램을 물리적 메모리에 올리게 된다.
페이징(Paging) 기법
이라고 한다.주변 장치와 입출력 장치는 CPU, 메모리와 다르게 인터럽트를 통해 관리가 이루어진다. 주변장치들은 CPU가 필요할 때 신호를 발생시켜 서비스를 요청하는데, 여기서 발생된 신호를 인터럽트
라고 부른다.
CPU는 CPU 스케줄링에 따라 자기에게 주어진 작업을 수행하다가 인터럽트가 발생하면 하던 일을 잠시 멈추고 작업 상태를 저장해두고나서 인터럽트에 의한 요청 서비스를 처리한다.