Home part2. CS 기초 지식 - 운영체제
Post
Cancel

part2. CS 기초 지식 - 운영체제

운영체제

윈도우, 맥, 리눅스와 같은 프로그램을 운영체제(OS, Operating System)라고 한다. 운영체제는 사용자가 컴퓨터를 쉽게 다룰 수 있도록 사용자와 컴퓨터 사이에서 인터페이스를 제공하고, 컴퓨터 시스템의 자원을 효율적으로 관리 및 분배하는 역할을 한다.

운영체제의 주요 기능은 프로세스 관리, 메모리 관리, 파일 시스템 관리, 네트워크 관리이다.

서버를 보다 안정적, 효율적으로 운영하고 사용자에게 더 나은 서비스를 제공하는 데 필요한 지식이기 때문이다.

프로세스와 스레드

프로세스

프로세스(process)란 컴퓨터에서 현재 실행 중인 프로그램을 의미한다. 프로그램은 어떤 작업을 처리하기 위한 일련의 명령어 모음으로, 평소에는 보조 기억 장치인 디스크에 저장돼 있다. 그러다가 사용자가 실행하면 디스크에 있던 프로그램이 메모리(RAM)에 올라오고(load), 메모리에 저장된 명령어가 CPU를 차지함으로써 실행될 수 있게 된다.

이렇게 메모리에 올라와 CPU를 점유하며 실행 중인 프로그램을 프로세스라고 한다.

알아야 할 점은 프로그램은 하나이지만 프로세스는 여러 개일 수 있다는 것이다.

스레드

스레드(thread)는 프로세스 내에서 작업을 처리하는 실행 단위로, 프로세스가 할당받은 자원(CPU, 메모리 등)을 이용해 작업을 처리한다. 프로세스는 최소 하나 이상의 스레드를 가지는데, 이를 메인 스레드(main thread)라고 한다.

스레드가 프로세스의 자원을 어떻게 이용하는지 이해하기 위해 프로세스의 메모리 구조를 살펴보면, 각각의 프로세스는 코드, 데이터, 힙, 스택 영역으로 나뉘어 저장된다.

여기서 하나의 프로세스 내에 여러 개의 스레드가 있다면 각 스레드는 스택 영역만 따로 할당 받고 나머지 영역은 공유한다. 즉 프로세스 내 코드, 데이터, 힙 영역을 서로 공유하며 실행된다.

이처럼 하나의 프로세스가 여러 개의 스레드로 구성하고 둘 이상의 스레드가 동시에 작업을 처리하는 방식을 멀티스레드(multi-thread)라고 한다. 멀티 스레드는 작업을 분할해 동시에 처리함으로써 성능을 향상하고 자원을 효율적으로 사용할 수 있게 한다. 하지만 여러 스레드가 자원을 공유하기 때문에 동기화 등의 문제가 발생할 수 있기에 적절한 스레드 동기화 기술이 필요하다. 이는 후술하기로 한다.

콘텍스트 스위칭

컴퓨터에서 동시에 처리할 수 있는 최대 작업 수는 CPU의 코어(core)수와 같다. 하지만 실제로 컴퓨터를 사용할 때 그 이상의 작업을 동시에 처리한다. 그 해답은 콘텍스트 스위칭(context switching)에 있다.

보통 컴퓨터에서 CPU의 코어 수보다 더 많은 작업이 실행되면 각 코어는 정해진 시간 동안 여러 작업을 번갈아가며 수행한다. 그리고 이 행동이 빠른 속도로 실행되기 때문에 동시에 실행되는 것처럼 느껴지는 것이다. 이를 멀티태스킹(multi-tasking)이라고 한다.

이러한 멀티태스킹 과정에서 실행 중인 작업의 교체를 콘텍스트 스위칭이라고 한다. 콘텍스트 스위칭이 일어나면 프로세스나 스레드가 번갈아가며 CPU를 할당받아 실행된다.

공유자원과 동기화 문제

프로세스 내의 스레드는 코드, 데이터, 힙 영역을 공유하며 사용한다고 앞에서 언급하였다. 이때 여러 스레드가 프로세스의 변수나 메모리 등의 자원을 함께 사용하기 때문에 공유 자원(shared resource) 문제가 발생하기도 하는데, 대표적인 예시로 경쟁 조건(race condition)이 있다.

경쟁 조건은 2개 이상의 스레드가 동시에 같은 자원에 접근해 읽기나 쓰기 작업을 수앵했을 때 발생한다. 이러한 경쟁 조건 문제가 발생할 수 있는 코드상의 특정 부분을 임계 영역(critical section)이라고 한다. 임계 영역에서 경쟁 조건 문제가 발생하지 않으려면 다음 세 가지를 만족해야 한다.

  • 상호 배제(mutual exclusive) : 하나의 스레드가 임계 영역에서 실행 중일 때는 다른 스레드가 임계 영역에 들어갈 수 없다.
  • 진행(progress) : 임계 영역에서 실행 중인 스레드가 없을 때만 다른 스레드가 임계 영역에 들어갈 수 있다.
  • 한정 대기(bounded waiting) : 특정 스레드가 임계 영역을 무한히 기다리지 않는다. 어떤 스레드이든 유한한 시간이 지나면 임계 영역에 들어갈 수 있다.

운영체제 정리

운영체제는 원론적인 내용이 많기에 입문자가 공부하기 어려운 부분이 있다. 하지만 운영체제를 깊이 이해할수록 시장에서 인정받는 개발자로 성장할 수 있다.

좀 더 깊이 공부하고 싶다면 다음 키워드를 검색하여 공부하자

  • 뮤텍스(mutex)
  • 세마포어(semaphore)
  • 데드록(deadlock)
  • 기아 현상(starvation)
  • 식사하는 철학자 문제(dining-philosopher problem)
  • 피터슨 알고리즘(Peterson’s algorithm)
  • CPU 스케줄링 알고리즘 : FCFS, SJF, SRF, RR
This post is licensed under CC BY 4.0 by the author.

part2. CS 기초 지식 - 네트워크

part2. CS 기초 지식 - 데이터베이스