728x90

전체 글 176

[개념 정리/운영체제] 경쟁 상태 해결 방법 - 뮤텍스, 세마포어, 모니터

경쟁 상태 해결 방법 공유 자원에 대한 경쟁 상태를 해결하는 방법에는 대표적으로 뮤텍스, 세마포어, 모니터 3가지가 있다. 이들은 상호 배제, 한정 대기, 진행의 융통성 조건을 만족시키며 경쟁 상태를 해결한다. 아래 설명은 프로세스, 스레드 모두 적용되는 내용이다. 상호 배제(mutual exclusion): 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없다. 한정 대기(bounded waiting): 특정 프로세스가 임계 영역 진입을 요청한 후 해당 요청이 승인되기 전까지 다른 프로세스가 임계 영역에 진입하는 횟수를 제한하는 것을 말한다. 이를 통해 특정 프로세스가 영원히 임계 영역에 들어가지 못하는 것을 방지한다. 진행의 융통성(progress): 어떠한 프로세스도 임계 영역을 ..

[개념 정리/운영체제] 공유 자원, 경쟁 상태, 임계 영역

공유 자원 공유 자원(shared resource)란 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 등의 자원이나 변수를 의미한다. 경쟁 상태 경쟁 상태(race condition)는 공유 자원을 둘 이상의 프로세스 또는 스레드가 동시에 읽거나 쓰는 상황을 말하며 동시에 접근을 시도할 때의 타이밍이 예상되는 결과 값에 영향을 줄 수 있는 상태를 의미한다. 임계 영역 임계 영역(critical section)은 둘 이상의 프로세스 또는 스레드가 공유자원에 접근할 때 순서 등의 이유로 결과가 달라지는 코드 영역을 말한다. 이 영역은 한 번에 둘 이상의 프로세스나 스레드가 들어갈 수 없게 설계된다. 아래는 a.js와 b.js가 하나의 JSON 파일에 동시에..

[개념 정리/운영체제] IPC (Inter-Process Communication)

IPC IPC(Inter-Process Communication)이란 프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 메커니즘을 뜻한다. IPC의 종류에는 대표적으로 공유 메모리, 파일, 소켓, 파이프, 메시지 큐 등 5가지가 있다. 브라우저를 띄워서 네이버 서버와 HTTP 통신으로 html 등의 파일을 가져오는 것 또한 IPC라고 볼 수 있다. 공유 메모리 여러 프로세스가 서로 통신할 수 있도록 메모리를 공유하는 것이다. IPC 방식 중 어떠한 매개체를 통해 데이터를 주고 받지 않고 메모리 자체를 공유하는 유일한 방식으로 불필요한 데이터 복사가 발생하지 않아 오버헤드가 없고, 가장 빠르다. 같은 메모리 영역을 여러 프로세스가 공유하기 때문에 동기화가 필요하다. 파일 디스크에 저장된 데이터를 기반으..

[개념 정리/운영체제] 멀티 프로세싱 & 멀티 스레딩

멀티 프로세싱 여러 개의 프로세스. 멀티 프로세스를 통해 동시에 두 가지 이상의 일을 수행할 수 있는 것을 말한다. 서로 다른 프로세스를 동시에 진행할 수도 있고, 같은 프로세스를 병렬적으로 수행할 수도 있다. 멀티 스레딩 프로세스 내 작업을 멀티 스레드로 처리하는 기법이다. 스레드끼리 서로 자원을 공유하고 프로세스보다는 가볍기 때문에 효율성이 높다는 장점이 있다. 하지만 한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 스레드로 이루어진 프로세스에 영향을 줄 수 있다는 단점이 있다. 대표적인 예시로, 브라우저는 멀티 프로세스이자 멀티 스레드 아키텍처를 가진 소프트웨어이다. browser process, renderer process, GPU process, plugin process 등 멀티 프로..

[개념 정리/운영체제] 프로세스 상태

프로세스 상태 프로세스의 상태는 다음의 7가지로 구성된다. 생성 상태 생성 상태(create or new)는 프로세스가 생성된 상태를 의미한다. fork() 또는 exec() 함수를 통해 프로세스가 생성된 상태이다. 이 때 PCB가 할당된다. fork(): 부모 프로세스의 주소 공간을 그대로 복사하며, 새로운 자식 프로세스를 생성하는 함수다. 주소 공간만 복사할 뿐, 부모 프로세스의 비동기 작업 등을 상속하지는 않는다. exec(): 새롭게 프로세스를 생성하는 함수. 대기 상태 대기 상태(ready)는 처음 프로세스가 생성(create)된 이후 메모리 공간이 충분하면 메모리를 할당받고, 충분하지 않으면 준비 큐(준비 순서열)에 들어가 대기 중인 상태를 말한다. CPU 스케줄러로부터 CPU 소유권이 넘어오..

[개념 정리/운영체제] PCB & 컨텍스트 스위칭

PCB(Process Control Block) PCB는 운영체제에서 관리하는 프로세스에 대한 메타 데이터를 저장한 데이터 블록이며, 중요한 정보이기에 커널 스택에 저장된다. 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고 프로세스가 종료되면 PCB는 제거된다. *커널 스택: 가상 메모리는 사용자 공간과 커널 공간으로 구분되며, 두 공간 모두 스택 자료구조를 기반으로 관리되어 사용자 스택, 커널 스택이라고도 부른다. 커널 스택은 가상 메모리 주소의 윗 부분을 말한다. 예를 들어, 가장 처음 시작하는 주소값이라고 볼 수 있다. 커널 스택은 커널 모드에서만 접근할 수 있으며, 사용자 스택은 유저 모드에서만 접근 가능하다. *메타 데이터: 데이터에 관한 구조화된 데이터이자, 데이터를 설명하는 작은 데이터..

[개념 정리/운영 체제] 프로세스의 메모리 구조

프로세스의 메모리 구조 운영체제는 프로세스에 적절한 메모리를 할당하는데, 일정한 구조를 기반으로 할당한다. 메모리는 위에서부터 스택(stack), 힙(heap), 데이터 영역(BSS segment, Data segment), 코드 영역(code segment)으로 나눠진다. 스택: 지역변수, 매개변수, 함수가 저장되고, 컴파일 시 크기가 결정된다. 그러나 함수가 함수를 호출 하는 등에 따라 런타임 시에도 크기가 변경된다. 동적인 특징. 힙: 힙은 동적 할당에 사용되며 런타임 시 크기가 결정된다. 동적인 특징. 데이터 영역: BSS(Block Starting Symbol) 영역과 Data 영역으로 나뉘고, 정적할당에 관한 부분을 담당한다. 정적인 특징. 코드 영역: 소스코드가 들어간다. 정적인 특징. 정적..

[개념 정리/운영체제] 프로그램 컴파일 과정

프로그램 컴파일 프로그램은 사람이 소스 코드를 작성하면, 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 잇는 기계어로 번역하여 실행될 수 있는 파일로 변환된다. 프로그램의 컴파일 과정은 아래의 4단계로 구분될 수 있다. 전처리: 소스코드의 주석 제거, #include 등 헤더파일을 병합하고, 매크로를 치환한다. 컴파일러: 오류 처리, 코드 최적화 작업을 하여 어셈블리어로 변환한다. 어셈블러: 어셈블리어는 목적코드(object code)로 변환된다. 확장자는 운영체제마다 다르나, 리눅스에서는 .o이다. a.c라는 파일을 만들면 a.o라는 파일이 만들어지게 된다. 링커: 프로그램 내의 라이브러리 함수 등과 결합하여 실행파일이 만들어진다. .exe, .out이라는 확장자를 사용한다. 아래는 간단한 코드를 ..

[개념 정리/운영체제] 프로세스 vs 스레드

프로세스(process) 컴퓨터 메모리에 올라와 실행되고 있는 프로그램 task와 같은 의미로 쓰인다. 하나의 스레드로 이루어진 싱글스레드 프로세스, 여러개의 스레드로 이루어진 멀티스레드 프로세스로 나뉜다. 스레드(thread) 프로세스 내 작업의 흐름을 지칭한다. 프로세스와 스레드의 차이 1. 프로세스는 코드, 데이터, 스택, 힙 메모리 영역을 기반으로 작업하는 반면, 스레드는 프로세스 내의 스택 메모리를 제외한 다른 영역을 프로세스 내의 다른 스레드들과 공유하여, 메모리적으로 이점이 있다. 2. 프로세스는 다른 프로세스와 격리되어 있기 때문에, 서로 통신하신 위해서는 IPC(Inter Process Communication)를 사용해야 하지만, 스레드는 다른 스레드와 격리되어 있지 않으므로, 그냥 통..

[개념 정리/운영체제] 페이지 교체 알고리즘 - FIFO, LRU, NUR, LFU

페이지 교체 알고리즘 페이지 폴트 발생 시 스와핑이 일어날 때, 페이지 교체 알고리즘(page replacement algorithm)에 의해 페이지가 교체된다. 이론상의 알고리즘인 오프라인 알고리즘과, 실제 사용되는 4가지 알고리즘에 대해 알아보자. 오프라인 알고리즘 오프라인 알고리즘은 가장 좋은 알고리즘이라고 일컫는 알고리즘으로, 가장 먼 미래에 참조될 페이지와 현재의 페이지를 바꾸는 알고리즘이다. LFD(Longest Forward Distance)라고도 한다. 예를 들어, 메모리에 세 자리가 있고, 0, 1, 2, 3, 4, 2 페이지가 순서대로 들어온다면 가장 먼 미래에 참조되는 2와 스와핑 하는 방식이다. 그러나 미래에 사용될 프로세스를 미리 알 수 없기에, 현실에서는 사용할 수 없는 알고리즘..

728x90