CS/Operating System 13

경쟁 상태(Race Condition), 프로세스 동기화, 데드락

경쟁 상태(Race Condition) Race Condition이란, 여러 개의 프로세스가 동시에 공유 데이터에 접근할 때 실행 순서에 따라 결과 값이 달라지는 현상이다. 따라서 이런 경쟁 상태에서는 각 프로세스가 공유 데이터에 동시에 접근하지 못하도록 접근 순서를 제어하는 동기화가 필요하다. 경쟁 상태은 CPU가 하나인 경우에도 발생하는데, CPU가 하나인 경우에는 동시에 하나의 프로세스만 실행할 수 있고, 또 각각의 프로세스는 자신의 주소 공간에만 접근할 수 있는데 경쟁 상태가 발생하는 이유는 뭘까? 예를 들어 다음과 같은 상황이 있다. 프로세스 A는 특권 명령을 수행하려는데, 자신이 직접 수행할 수 없으므로 운영체제에게 부탁하기 위해 시스템 콜을 발생시킨다. CPU 제어권이 운영체제로 넘어오고, ..

CS/Operating System 2024.04.08

인터럽트와 입출력 방식

인터럽트 CPU는 특별한 일이 없으면 현재 수행 중인 프로세스의 다음 명령을 순차적으로 수행한다. CPU는 매번 프로그램 카운터가 가리키는 곳에 있는 명령어를 수행한다. 따라서 현재 수행 중인 프로세스로부터 CPU를 회수해서 CPU가 다른 일을 수행하도록 하기 위해서는 인터럽트가 필요하다. 특권 명령 특권 명령은 운영체제 내에서 특정한 권한이 필요한 명령어를 말한다. 따라서 특권 명령을 실행하기 위해서는 일반 사용자 프로그램이 실행하는 것은 불가하고 인터럽트를 발생시켜 운영체제만 특권 명령을 실행할 수 있다. 즉, 모드 비트가 0일 때(=커널 모드)만 특권 명령을 실행할 수 있다. 인터럽트의 종류(발생 상황) 인터럽트는 인터럽트를 발생시키는 주체가 누구냐에 따라 하드웨어 인터럽트와 소프트웨어 인터럽트로 ..

CS/Operating System 2024.04.06

스케줄러

스케줄러란 어떤 프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 코드를 의미한다. 장기 스케줄러(작업 스케줄러) 시작 프로세스 중 어떤 프로세스에게 메모리를 할당하고 준비 큐에 삽입할 것인지를 결정한다. 장기 스케줄러는 메모리에 동시에 올라가 있는 프로세스의 수를 조절하는 역할을 한다. (degree of multiprogramming을 제어) 그러나 시분할 시스템에서는 일반적으로 장기 스케줄러가 없다. 과거에는 적은 양의 메모리를 많은 프로세스들에게 할당하면 프로세스당 메모리 보유량이 지나치게 적어져 시스템 효율이 매우 떨어졌기 때문에 장기 스케줄러가 이를 조절했다. 이에 비해 현대의 시분할 시스템용 운영체제에서는 프로세스가 시작 상태가 되면 장기 스케줄러 없이 곧바로 그 프로세스에게 메모리를 ..

CS/Operating System 2024.04.02

블로킹/논블로킹과 동기/비동기 처리 방식

블로킹(Blocking) / 논블로킹(Non-Blocking) 블로킹(Blocking)과 논블로킹(Non-Blocking)은 I/O 작업을 처리하는 방법이다. 블로킹: I/O 작업을 요청한 스레드는 I/O 작업이 완료될 때까지 봉쇄 상태가 되어 대기한다. 논블로킹: I/O 작업을 요청한 스레드는 I/O 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다. 즉, 운영체제 관점에서 살펴보면 다음 블로그(https://olsohee.tistory.com/150)에서 설명하는 동기식 입출력 방식이 블로킹 방식이고, 비동기식 입출력 방식이 논블로킹 방식이다. 그리고 주의할 점은 블로킹 방식에서 I/O 작업을 요청한 스레드가 봉쇄 상태가 되었더라도, 그동안 CPU는 다른 스레드를 실행한다는 것이다. 네트워크 ..

CS/Operating System 2024.04.01

디스크 관리

디스크는 컴퓨터 시스템의 대표적인 2차 저장장치이다. 메모리는 휘발성 저장장치이므로 전원이 나가면 그 내용이 모두 사라진다. 따라서 컴퓨터에서 수행한 작업의 결과를 영구적으로 보관하기 위해서는 디스크 같은 2차 저장장치를 이용해야 한다. 디스크의 구조 논리블록: 디스크 외부에서는 디스크를 일정한 크기의 저장공간들로 이루어진 1차원 배열처럼 취급하게 된다. 그리고 이때 이 일정한 크기의 저장공간을 논리블록이라고 한다. 디스크에 데이터가 저장될 때 논리블록 단위로 저장되고, 디스크 외부로 입출력이 일어날 때도 논리블록 단위로 전송된다. 섹터: 각 논리블록이 저장되는 디스크 내의 물리적 위치이다. 디스크 컨트롤러가 논리블록을 디스크 내의 섹터 번호로 매핑하는 역할을 담당한다. 즉, 해당 논리블록이 저장된 물리..

CS/Operating System 2024.03.05

가상 메모리 관리(페이징 기법)

페이징 기법 페이징 기법은 논리적 메모리를 동일 크기의 페이지로 나누고, 물리적 메모리도 페이지와 동일 크기의 페이지 프레임으로 나눈다. 장점 프로세스의 논리적 주소 공간과 물리적 메모리 공간이 모두 같은 크기의 페이지/프레임 단위로 나누어지기 때문에 외부 조각이 발생하지 않는다. 단점 프로그램의 크기가 항상 페이지 크기로 정확히 나누어 떨어지지 않을 수 있기 때문에 프로세스의 논리적 주소 공간 중 제일 마지막에 위치한 페이지에서는 물리적으로 내부조각이 발생할 수 있다. 페이징 기법은 하나의 프로세스라 하더라도 페이지 단위로 물리적 메모리에 올리는 위치가 상이하다. 따라서 주소 바인딩 작업이 페이지 단위로 이루어지기 때문에 주소 바인딩 과정이 연속할당 방식에 비해 복잡하다. 페이지 테이블 하나의 프로세스..

CS/Operating System 2024.02.29

가상 메모리, 주소 바인딩, 메모리 할당

가상 메모리가상 메모리는 메모리 관리 기법의 하나로, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다. 프로그램이 실행되면 프로그램의 모든 코드와 데이터는 가상 메모리에 할당된다. 가상 메모리는 추상화된 메모리 공간으로, 각 프로세스마다 가상 메모리를 갖는다. 그러나 가상 메모리에 할당된 코드와 데이터는 물리적 메모리에 로드될 때까지 실제 메모리에 존재하지 않는다. 가상 주소(논리 주소): 가상적으로 주어진 주소물리 주소(실주소): 실제 RAM 메모리 상에서의 주소메모리 관리자(운영체제)는 프로그램을 물리적 메모리에 적재하기도 하고, 물리적 메모리 부족 시 스왑 영역으로 스왑 아웃시키기도 한다. 즉, 프로세스 입장에서는 물리적 메모리를 신경쓰지 않고 자신이 필요한 만큼 가상 주..

CS/Operating System 2024.02.29

CPU 스케줄링

CPU 버스트 시간에 따른 프로세스의 종류 기계어 명령은 다음 세 가지 명령으로 구분된다. CPU 내에서 수행되는 명령: CPU 내에서만 수행되므로 명령 수행 속도가 매우 빠르다. (ex, add 명령: 레지스터에 있는 두 값을 더해 레지스터에 저장) 메모리 접근을 필요로 하는 명령: CPU 내에서 수행되는 명령에 비해 오래 소요되지만 비교적 짧은 시간에 수행할 수 있는 명령에 해당된다. (ex, load 명령: 메모리의 데이터를 CPU로 읽어 들임, store 명령: CPU에서 계산된 결과값을 메모리에 저장) 입출력을 동반하는 명령: CPU나 메모리 접근 명령에 비해 아주 오랜 시간이 소요된다. CPU 내에서 수행되는 명령과 메모리 접근을 필요로 하는 명령은 사용자 프로그램이 직접 수행할 수 있는 일반..

CS/Operating System 2024.02.28

프로세스와 스레드

스레드 프로세스는 메모리에 할당된 프로그램, 즉 실행 중인 프로그램으로 운영체제의 관리의 단위이다. 반면, 스레드는 프로세스 내부에서의 CPU 수행 단위를 의미한다. 그 전에 프로세스가 어떻게 관리되는지 정리해보자. 프로그램을 실행하게 되면 프로세스가 생성된다. 프로세스가 생성되면 각 프로세스의 주소 공간(code, data, stack)과 PCB(Process Control Block)가 생성된다. 만약 동일 프로그램을 여러 개 실행하는 경우 그만큼 프로세스가 생성된다. 즉 그만큼 메모리를 차지하고 동일 프로그램이기 때문에 각 프로세스들의 실행 코드는 같다. 따라서 굉장히 비효율적이다. 따라서 여기서 스레드가 등장한다. 동일 프로그램에 대한 프로세스가 여러 개 있을 경우 하나의 프로세스에 여러 개의 스..

CS/Operating System 2023.12.27

프로세스의 주소 공간, 프로세스 상태, 프로세스 스케줄링 큐

프로세스의 주소 공간 프로그램이 실행되면 프로그램의 모든 코드와 데이터는 가상 메모리에 할당된다. 가상 메모리는 추상화된 메모리 공간으로, 각 프로세스마다 가상 메모리를 갖는다. 그러나 가상 메모리에 할당된 코드와 데이터는 물리적 메모리에 로드될 때까지 실제 메모리에 존재하지 않는다. 그리고 필요에 따라 물리적 메모리에 적재되거나 스왑 영역으로 스왑 아웃된다. 또한 가상 메모리 내의 논리적 주소를 물리적 메모리의 물리적 주소로 변환하는 과정이 필요한데, 이는 MMU(Memory Management Unit)라는 하드웨어 장치가 수행한다. 각각의 가상 메모리는 코드, 데이터, 스택으로 구성된다. 코드: 개발자가 정의한 프로그램 코드가 CPU가 수행할 수 있는 기계어로 변환되어 저장된다. 데이터: 전역 변수..

CS/Operating System 2023.12.23