[CS/OS] 운영체제 간단 요약

csOS운영체제
avatar
2025.03.17
·
17 min read

  • 프로세스 vs 스레드 차이

    • 프로세스 : 자신만의 고유 공간과 자원을 할당받아 사용하며, 최소 1개의 스레드를 소유함

      • Code, Data, Heap(동적할당 시 사용), Stack(임시 메모리 영역)

    • 스레드 : Stack만 따로 할당받고 나머지 영역은 서로 공유하면서 사용

    • => 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하지만, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이 존재

    • 멀티프로세스

      • 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업 수행

      • 장점: 안정성 / 단점: 각각 독립된 메모리 영역을 가지고 있어 작업량이 많을수록 오버헤드 발생. Context Switching으로 인한 성능 저하

      • Context Switching : 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
        -> 캐시메모리 초기화와 같은 무거운 작업이 진행되었을 때, 오버헤드가 발생할 문제 존재

  • 멀티스레딩과 동기화 (뮤텍스, 세마포어)

    • 멀티스레드 : 하나의 응용 프로그램이 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것

    • 장점 - 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소, 전역 변수와 정적 변수에 대한 자료 공유 가능

    • 단점 - 안정성 문제, 하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 가지기 때문) → Critical Selection 기법을 통해 대비

    • Critical Selection(임계 구역) : 여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 부분

    • 공유된 자원의 데이터는 한번에 하나의 프로세스만 접근할 수 있도록 제한을 둬야 함

    • 세마포어 : 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법

      • P : 임계 구역 들어가기 전에 수행 (프로세스 진입 여부를 자원의 개수(S)를 통해 결정)

      • V : 임계 구역에서 나올 때 수행 (자원 반납 알림, 대기 중인 프로세스를 깨우는 신호)

      • 한 프로세스가 P 또는 V를 수행하고 있는 동안 프로세스가 인터럽트 당하지 않게 된다. P와 V를 사용하여 임계 구역에 대한 상호배제 구현이 가능하게 되었다.

    • 뮤텍스 : 임계 구역을 가진 스레드들의 실행시간이 서로 겹치지 않고 각각 단독으로 실행되게 하는 기술 (이진 세마포어)

      • lock : 현재 임계 구역에 들어갈 권한을 얻어옴 (만약 다른 프로세스/스레드가 임계 구역 수행 중이면 종료할 때까지 대기)

      • unlock : 현재 임계 구역을 모두 사용했음을 알림 (대기 중인 다른 프로세스/스레드가 임계구역에 진입할 수 있음)

      • Dekker 알고리즘 : flag와 turn 변수를 통해 임계 구역에 들어갈 프로세스/스레드를 결정하는 방식

        • flag : 프로세스 중 누가 임계영역에 진입할 것인지 나타내는 변수

        • turn : 누가 임계구역에 들어갈 차례인지 나타내는 변수

      • Peterson 알고리즘 : 데커와 유사하지만, 상대방 프로세스/스레드에게 진입 기회를 양보함

      • Bakery 알고리즘 : 여러 프로세스/스레드에 대한 처리가 가능한 알고리즘. 가장 작은 수의 번호표를 가지고 있는 프로세스가 임계 구역에 진입

  • CPU 스케줄링 알고리즘 (FCFS, SJF, RR, Priority)

    • 스케줄링 조건 : 오버헤드 줄이고, 사용률 높이고, 기아 현상 줄여야 함

    • 스케줄링 목표

      • Batch System : 가능하면 많은 일을 수행. 시간보다 처리량이 중요

      • Interactive System : 빠른 응답 시간. 적은 대기 시간

      • Real-time System : 기한 맞추기

    • 비선점 스케줄링

      • 프로세스 종료 또는 I/O 등의 이벤트가 있을 때까지 실행 보장 (처리시간 예측 용이)

      • I/O or Event Wait, Exit

      • FCFS(First Come First Served)

        • 큐에 도착한 순서대로 CPU 할당

        • 실행 시간이 짧은게 뒤로 가면 평균 대기 시간이 길어짐

      • SJF (Shortest Job First)

        • 수행시간이 가장 짧다고 판단되는 작업을 먼저 수행

        • FCFS보다 평균 대기 시간 감소, 짧은 작업에 유리

      • HRN (Highest Response-ratio Next)

        • 우선순위를 계산하여 점유 불평등을 보완한 방법(SJF 단점 보완)

        • 우선순위 = (대기시간+실행시간) / (실행시간)

    • 선점 스케줄링

      • OS가 CPU의 사용권을 선점할 수 있는 경우, 강제 회수하는 경우 (처리시간 예측 어려움)

      • Interrupt, I/O or Event Completion, I/O or Event Wait, Exit

      • Priority 스케줄링

        • 정적/동적으로 우선순위를 부여하여 우선순위가 높은대로 처리

        • 우선순위가 낮은 프로세스가 무한정 기다리는 Starvation이 생길 수 있음

        • Aging 방법으로 Starvation 문제 해결 가능

      • RR (Round Robin)

        • FCFS에 의해 프로세스들이 보내지면 각 프로세스는 동일한 시간의 Time Quantum(실행의 최소 단위시간) 만큼 CPU를 할당 받음

        • 할당 시간이 크면 FCFS와 같게 되고, 작으면 문맥교환(Context Switching) 잦아져서 오버헤드 증가

      • Multilevel-Queue (다단계 큐)

        • 작업들을 여러 종류의 그룹으로 나누어 여러 개의 큐를 이용하는 방법

        • 우선순위가 낮은 큐들이 실행 못하는 걸 방지하고자 각 큐마다 다른 time quantum을 설정해주는 방식 사용

        • 우선순위가 높은 큐는 작은 Time Quantum 할당. 우선순위가 낮은 큐는 큰 Time Quantum 할당.

      • Multilevel-Feedback-Queue (다단계 피드백 큐)

        • 다단계 큐에서 자신의 time quantum을 다 채운 프로세스는 밑으로 내려가고 자신의 time quantum을 다 채우지 못한 프로세스는 원래 큐 그대로

        • 짧은 작업에 유리, 입출력 위주 작업에 우선권을 줌

        • 처리 시간이 짧은 프로세스를 먼저 처리하기 때문에 turn around 평균 시간을 줄여줌

  • 가상 메모리, 페이지 교체 알고리즘 (FIFO, LRU 등)

    • 다중 프로그래밍 시스템에 여러 프로세스를 수용하기 위해 주기억장치를 동적으로 분할하는 메모리 관리 작업이 필요하기 때문에 이 기법을 도입

      • 연속 메모리 관리 : 프로그램 전체가 하나의 커다란 공간에 연속적으로 할당되어야 함

        • 고정 분할 기법 : 고정된 파티션으로 분할 (내부 단편화 발생)

        • 동적 분할 기법 : 파티션들이 동적 생성되며, 자신의 크기와 같은 파티션에 적재 (외부 단편화 발생)

      • 불연속 메모리 관리 : 프로그램의 일부가 서로 다른 주소 공간에 할당될 수 있는 기법

        • 페이지 : 고정 사이즈의 작은 프로세스 조각 -> 고정 크기

        • 프레임 : 페이지 크기와 같은 주기억장치 메모리 조각

        • 단편화 : 기억 장치의 빈 공간 또는 자료가 여러 조각으로 나뉘는 현상

        • 세그먼트 : 서로 다른 크기를 가진 논리적 블록이 연속적 공간에 배치되는 것 -> 가변 크기

    • 가상 메모리 페이징

      • 단순 페이징과 비교해 프로세스 페이지를 전부 로드시킬 필요없음

      • 필요한 페이지가 있으면 나중에 자동으로 불러들어짐

      • 외부 단편화 X

      • 복잡한 메모리 관리로 오버헤드 발생

    • 가상메모리 세그멘테이션

      • 필요하지 않은 세그먼트들은 로드되지 않음

      • 필요한 세그먼트 있을 때 나중에 자동으로 불러들어짐

      • 내부 단편화 X

      • 복잡한 메모리 관리로 오버헤드 발생

    • 페이지 교체 알고리즘

      • 페이지 부재 발생 -> 새로운 페이지를 할당해야 함 -> 현재 할당된 페이지 중 어떤 것을 교체할 지 결정하는 방법

      • 메모리가 가득 차면, 추가로 페이지를 가져오기 위해서 쓰지 않는 페이지는 out하고, 해당 공간에 현재 필요한 페이지를 in 시켜야 한다. 여기서 어던 페이지를 out 시켜야 할지 정해야 한다. (victim page)

      • FIFO 알고리즘 - 메모리에 가장 먼저 올라온 페이지를 먼저 내보내는 알고리즘

        • victim page : out되는 페이지는 가장 먼저 메모리에 올라온 페이지

        • 간단한 방법, 초기화코드에서 적절한 방법

      • OPT 알고리즘 - 앞으로 가장 사용하지 않을 페이지를 가장 우선적으로 내보냄

        • FIFO에 비해 페이지 결함의 횟수를 많이 감소시킬 수 있음

        • 실질적으로 페이지가 앞으로 잘 사용되지 않을 것이라는 보장이 없기 때문에 수행하기 어려운 알고리즘

      • LRU 알고리즘 - 최근에 사용하지 않은 페이지를 가장 먼저 내려보내는 알고리즘

        • 과고를 보고 판단하므로 실질적으로 사용이 가능한 알고리즘

        • OPT보다는 페이지 결함이 더 일어날 수 있지만, 실제로 사용할 수 있는 알고리즘에서는 가장 좋은 방법 중 하나

  • 파일 시스템 개념

    • 컴퓨터에서 파일이나 자료를 쉽게 발견할 수 있도록, 유지 및 관리하는 방법

    • 커널 영역에서 동작

    • 파일 CRUD 기능을 원활히 수행하기 위한 목적

    • 계층적 디렉토리 구조

    • 디스크 파티션 별로 하나씩 둘 수 있음

    • 메타 영역과 데이터 영역으로 구분

    • 순차 접근 - 가장 간단한 접근 방법 (read, write)

      • 현재 위치를 가리키는 포인터에서 시스템 콜이 발생할 경우 포인터를 앞으로 보내면서 read와 write를 진행. 뒤로 돌아갈 땐 지정한 offset만큼 되감기를 해야 함

    • 직접 접근 - 특별한 순서없이, 빠르게 레코드를 read, write

      • 현재 위치를 가리키는 cp 변수만 유지하면 됨

      • 무작위 파일 블록에 대한 임의 접근을 허용하므로, 순서의 제약이 없음

      • 데이터베이스에 활용

    • 디렉터리

      • UFD(User file Directory)

      • MFD(Master file directory)

  • 데드락(교착상태)

    • 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태

    • 무한히 다음 자원을 기다리게 되는 상태

    • 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생

    • 발생 조건 - 4가지가 모두 성립해야 발생

      • 상호 배제 : 자원은 한번에 한 프로세스만 사용할 수 있음

      • 점유 대기 : 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 함

      • 비선점 : 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없음

      • 순환 대기 : 프로세스의 집합에서 순환 형태로 자원을 대기하고 있어야 함

    • 데드락 처리

      • 예방 : 교착 상태 발생 조건 중 하나를 제거하면서 해결 (자원 낭비 엄청 심함)

      • 회피

        • 은행원 알고리즘 : 프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정상태로 남아있게 되는지 사전에 검사하여 데드락 회피

      • 탐지 : 자원 할당 그래프를 통해 데드락 탐지

      • 회복 : 교착 상태 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시키는 방법







- 컬렉션 아티클