본문 바로가기

CS/운영체제

시스템 콜(System Call) - 커널(Kernel) 모드 프로그램 카운터가 운영체제가 존재하는 부분을 가리키고 있다면, 현재 운영체제의 코드를 수행 중이며 CPU가 커널 모드에서 수행 중이라고 함 - 사용자(User) 모드 프로그램 카운터가 사용자 프로그램이 존재하는 메모리 위치를 가리킬 경우, 사용자 프로그램을 수행 중이며 CPU가 사용자 모드에서 수행 중이라고 함 일반 명령 : 메모리에서 자료를 읽어와서 CPU에서 계산하고 결과를 메모리에 쓰는 일련의 명령들, 모든 프로그램이 수행할 수 있음(사용자 모드) 특권 명령 : 보안이 필요한 명령으로 입출력 장치, 타이머 등 각종 장치를 접근하는 명령(커널 모드) CPU 내에 모드 비트를 두어 두 명령을 수행 사용자 프로그램이 디스크의 파일을 접근하거나, 화면에 결과를 출력하는 등의 작..
인터럽트(Interrupt) - 인터럽트(Interrupt)란? 하드웨어 장치가 CPU에게 어떤 사실을 알려주거나 CPU의 서비스를 요청해야 할 경우, CPU 내에 있는 인터럽트 라인을 세팅하여 인터럽트를 발생시킴(프로그램이 명령을 수행하기 위해서는 CPU를 할당받아야 함) CPU는 매번 프로그램 카운터가 가리고 있는 곳의 명령을 수행한 뒤, 다음 명령을 수행하기 직전에 인터럽트 라인이 세팅되었는지 체크함 이를 통해 인터럽트가 발생했으면 CPU는 현재 수행 중이던 프로세스를 멈추고 운영체제의 인터럽트 처리 루틴으로 이동하여 인터럽트 처리를 수행함 - 인터럽트의 종류 1) 하드웨어 인터럽트(일반적인 인터럽트) 하드웨어 컨트롤러가 CPU의 서비스를 요청하기 위해 발생시키는 인터럽트 2) 소프트웨어 인터럽트(Trap) 1. 예외 상황(E..
캐시의 지역성 - 캐시의 지역성 원리 캐시 메모리는 속도가 빠른 장치와 느린 장치 간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리 이러한 역할을 수행하기 위해서는 CPU가 어떤 데이터를 원할 것인가를 어느 정도 예측할 수 있어야 함 캐시의 성능은 작은 용량의 캐시 메모리에 CPU가 이후에 참조할 쓸모 있는 정보가 어느 정도에 들어있느냐에 따라 좌우됨 이때 적중률(Hit rate)을 극대화 시키기 위해 데이터 지역성(Locality)의 원리를 사용 지역성의 전제조건으로 프로그램은 모든 코드나 데이터를 균등하게 Access하지 않는다는 특성을 기본으로 함 => Locality란 기억 장치 내의 정보를 균일하게 Access하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성 이 데이터 지역성은 대표..
가상 메모리 - 가상 메모리 다중 프로그래밍을 실현하기 위해서는 많은 프로세스들을 동시에 메모리에 올려두어야 함 가상 메모리는 프로세스 전체가 메모리 내에 올라오지 않더라도 실행 가능하게 하는 기법(프로그램이 물리 메모리보다 커도 됨) 운영체제는 모든 프로그램에게 같은 크기의 메모리를 할당하지 않고 몇몇 프로그램에게 집중적으로 메모리를 할당한 후, 시간이 흐르면 이들에게서 메모리를 회수하여 다른 프로그램들에게 다시 집중적으로 할당하는 방식 사용 CPU를 할당 받아 당장 수행할 부분만 메모리에 올려놓고, 그렇지 않은 부분은 디스크의 swap 영역에 내려놓았다가 다시 필요해지면 메모리에 올라가 있는 부분과 교체하는 방식 사용 -> 프로그램이 자기 자신만 메모리를 사용하는 것과 같은 효과 가상 메모리는 프로세스마다 각각 ..
Paging vs Segmentation - 메모리 관리 배경 각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려 있음 (단, 운영체제만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약 없음) 1) Swapping : 메모리 관리를 위해 사용되는 기법 표준 Swapping 방식으로는 Round-robin과 같은 스케줄링의 다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스의 메모리를 보조 기억장치(하드디스크)로 내보내고 다른 프로세스의 메모리를 불러 들일 수 있음 (이 과정을 swap이라 함. 주기억장치(RAM)으로 불러오는 과정을 swap-in, 보조 기억장치로 내보내는 과정을 swap-out이라 함. swap에는 큰 디스크 전송시간이 필요하기 때문에 현재에..
교착상태(DeadLock) - 교착 상태란? 한정된 자원을 여러 곳에서 사용하려 할 때 발생하는 문제 즉, 프로세스가 자원을 얻지 못해서 다음 처리를 하지 못하는 상태 현재 서로 원하는 자원이 상대방에게 할당되어 있어서 두 프로세스는 무한정 wait 상태에 빠지게 됨 -> DeadLock - 발생하는 경우 멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황 발생 한 프로세스가 자원을 요청했을 때, 그 자원을 사용할 수 없는 상황 발생 -> 프로세스는 대기 상태로 들어감 대기 상태로 들어간 프로세스들이 실행 상태로 변경될 수 없을 때 DeadLock 발생 - 교착 상태 발생 조건 1) 상호 배제(Mutual Exclusion) 자원은 한 번에 한 프로세스만 사용 가능 2) 점유 대기(Hold and Wait) 최소..
동기화 문제 - 동기 vs 비동기 1) 동기(synchronous) 동시에 일어난다는 뜻(요청과 결과가 동시에 일어남) 바로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 함 요청과 결과가 한 자리에서 동시에 일어남 A노드와 B노드 사이의 작업 처리 단위(transaction)를 동시에 맞춤 설계가 매우 간단, 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 함 -> 실행되었을 때 값이 반환되기 전까지 blocking 2) 비동기(asynchronous) 동시에 일어나지 않는다는 뜻(요청과 결과가 동시에 일어나지 않음) 요청한 그 자리에서 결과가 주어지지 않음 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 됨 설계가 복잡하지만, 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 ..
CPU 스케줄링 - CPU Scheduling이란? CPU가 하나의 프로세스 작업이 끝나면 다음 프로세스가 작업을 수행해야 함, 이때 어떤 프로세스를 다음에 처리할지 선택하는 알고리즘 따라서 상황에 맞게 CPU를 어떤 프로세스에 배정하여 효율적으로 처리하는가가 관건 - Preemptive vs Non-Preemptive 1) Preemptive(선점) 프로세스가 CPU를 점유하고 있는 동안 I/O나 인터럽트가 발생하지 않았음에도 다른 프로세스가 해당 CPU를 강제로 점유 가능 프로세스가 정상적으로 수행중인 동안 다른 프로세스가 CPU를 강제로 점유하여 실행 가능 2) Non-Preemptive(비선점) 한 프로세스가 CPU를 점유했다면 I/O나 인터럽트 발생 또는 프로세스가 종료될 때까지 다른 프로세스가 CPU를 점유하..