[운영체제] 혼자 공부하는 컴퓨터구조 + 운영체제 연습문제 9장~12장

2023. 10. 30. 16:48·[ Computer Science ]/Computer Network

혼자 공부하는 컴퓨터구조 + 운영체제 연습문제

 

# 1. 운영체제를 알아야 하는 이유

* 운영체제는 실행할 프로그램에 자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 프로그램

 

* 운영체제에 대한 설명

- 운영체제를 이해하면 하드웨어와 프로그램을 더 깊이 이해

- 운영체제는 메모리 내 커널 영역에 적재

- 운영체제는 시스템 자원을 관리하는 프로그램

- 운영체제는 사용자가 실행하는 프로그램이 올바르게 실행되도록 도움

 

# 2. 운영체제의 큰 그림 

* 커널은 운영체제의 핵심 기능을 담당하는 부분을 의미

 

* 이중모드와 시스템 호출

- 운영체제의 핵심 서비스는 커널 모드로 실행

- 일반적인 응용 프로그램은 사용자 모드로 실행

- 시스템 호출을 통해 사용자 모드에서 커널 모드로 전환 -> 운영체제 서비스 제공받기 위해

- 시스템 호출은 일종의 인터럽트. 소프트웨어적인 인터럽트 -> 입출력장치에 의해 발생 / 특정 명령어에 의해 발생

 

* 운영체제의 핵심 서비스

- 프로세스 관리

- 자원 접근 및 할당

- 파일 시스템 관리

 

# 3. 프로세스와 스레드

* CPU를 정해진 시간 만큼만 사용하고 시간이 끝났음을 알리는 타이머 인터럽트 (하드웨어 인터럽트) 발생

 

* PCB 프로세스 제어 블록 - OS는 PCB를 통해 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고 프로세스에 자원을 배분 

 

* 프로세스

- 프로세스 : 실행되는 프로그램

- 프로세스가 생성되면 커널 영역에 PCB가 생성됨

- 프로세스들은 문맥 교환을 통해 번갈아 가면서 수행

- 프로세스는 반드시 사용자와 상호작용할 수 있어야 하는 것은 아님 -> 사용자 상호작용 없이도 백그라운드에서 시스템 리소스 사용 및 실행 가능. 

 

* 문맥 교환

- 빠르게 자주 수행되는 것이 좋은 것만은 아님 -> 오버헤드 우려

- 직전에 수행되던 프로세스의 문맥이 백업되고 다음에 수행할 프로세스의 문맥이 복구됨

- 문맥은 PBC 에 기록됨 

 

# 4. 프로세스 상태와 계층 구조

* 프로세스 상태

- 생성상태 -> 준비상태 -> (디스패치) -> 실행상태 -> 종료상태

- 실행상태 -> (타이머 인터럽트) -> 준비상태

- 실행상태 -> (입출력 요청) -> 대기상태 -> (입출력 완료) -> 준비상태

 

* fork() exec()

- fork 시스템 호출을 하면 새로운 폴더가 아닌 프로세스를 생성

- fork 시스템 호출을 하면 부모 프로세스의 복제본이 자식 프로세스로서 생성

- exec 시스템 호출을 하면 프로세스의 메모리 공간이 다른 프로세스의 내용으로 변경 (덮어쓰기)

- 많은 운영체제는 fork exec를 통해 프로세스 계층 구조 형성

 

* 프로세스 상태

- 생성 상태는 프로세스를 생성중인 상태

- 준비 상태는 CPU를 할당받아 실행할 수 있으나 본인 차례를 기다리다가 할당 받고 실행할 준비

- 실행 상태는 프로세스 실행중

- 종료 상태는 프로세스 종료중

 

# 5. 스레드 

* 스레드

- 프로세스 내의 실행의 흐름 단위

- 프로세스 내의 스레드들은 각기 다른 코드/데이터/힙 영역을 가지고 있지 않음 

- 프로세스 내의 스레드들은 각기 다른 프로그램 카운터 값을 가지고 있음

- 프로세스 내의 스레드들은 각기 다른 스택을 가지고 있음 -> 스레드 id, pc 값, 레지스터 값, 스택을 각각 가지고 있음

 

-> 코드와 데이터, 파일, 힙은 스레드가 공유하는 자원

-> 레지스터, 스택, 프로그램 카운터는 스레드가 공유하지 않는 자원

 

* 멀티프로세스와 멀티스레드의 차이

- 프로세스끼리는 기본적으로 자원을 공유하지 않지만 프로세스 내의 스레드끼리는 같은 프로세스 내의 자원을 공유함

 

# 6. CPU 스케쥴링

* 프로세스 스케쥴링

- 운영체제는 우선순위를 토대로 프로세스 스케쥴링

- 스케쥴링 큐를 사용해 스케쥴링할 프로세스 관리

- 준비 큐에는 준비 상태인 프로세스들이 , 대기 큐에는 대기 상태인 프로세스들이 삽입

- 선점형 스케쥴링은 프로세스가 이용 중인 자원을 강제로 뺏을 수 있는 방식

 

* 선점형 스케쥴링과 비선점형 스케쥴링

- 선점형 스케쥴링은 어느 한 프로세스가 자원을 독점할 수 없는 스케쥴링 방식

- 선점형 스케쥴링은 문맥 교환 과정의 오버헤드가 비선점형 스케쥴링에 비해 많음

- 비선점형 스케쥴링은 어느 한 프로세스가 자원을 독점할 수 있는 스케쥴링 방식

- 비선점형 스케쥴링은 문맥 교환 과정의 오버헤드가 선점형 스케쥴링에 비해 적음

 

# 7. CPU 스케쥴링 알고리즘

* 준비 큐에 A, B, C, D 순으로 프로세스를 삽입한다면 선입 선처리 스케쥴링 알고리즘을 적용하면 A-B-C-D 순서대로 CPU 할당 받음 

* 우선순위가 낮아 실행이 계속 연기되는 문제 - 기아문제

* 기아문제 해결을 위해 점차 우선순위를 높이는 기법 - 에이징

 

# 8. 동기화

* 실행 순서를 위한 동기화 - 프로세스를 올바른 순서대로 실행하기

* 상호 배제를 위한 동기화 - 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하도록 하기

* 임계 구역

- 임계 구역에서는 반드시 하나의 프로세스만 실행되도록 해야함

- 여러 프로세스가 동시에 실행될 경우 레이스 컨디션 발생

- 임계 구역에서 실행되는 프로세스가 있다면 다른 프로세스는 기다려야함  -> 무한정 대기는 아님. 유한대기

- 운영체제는 임계 구역을 관리

 

# 9. 동기화 기법

* 뮤텍스 락과 세마포

- 뮤텍스 락은 임계 구역을 잠근 뒤 임계 구역에 진입함으로써 상호배제를 위한 동기화를 이룸

- 세마포는 공유 자원이 여러 개 있는 상황에서도 이용 가능

- 세마포를 이용해 프로세스 실행 순서 제어를 위한 동기화도 이룰 수 있음

- 세마포를 이용하면 반드시 바쁜 대기를 할 필요는 없음

 

* 조건변수 x, y가 있다고 가정할 때 스레드 a는 실행과정에서 x.wait 호출, 스레드 b는 y.wait 호출함. 스레드 c가 y.signal 을 호출하면 스레드 a와 b 중 실행이 재개되는 스레드는 b 이다

-> y.wait 에서 블록이 해제되어 y 조건 변수의 대기 큐에서 먼저 대기 중이던 스레드가 재개됨

여전히 x.wait를 호출한 a 는 블록된 상태이므로 재개되지 않음

 

* 세마포를 이용하면 동시에 실행되는 프로세스 혹은 스레드 간에 실행 순서 제어를 위한 동기화(특정 조건이 만족되어야만 실행할 수 있는 상황에서 올바른 순서대로 실행하게 하는 것)와 상호 배제를 위한 동기화(동시에 접근해서는 안되는 자원에 동시에 접근하지 않도록 제어하는 것)를 할 수 있음

 

728x90

'[ Computer Science ] > Computer Network' 카테고리의 다른 글

[컴퓨터 네트워크] 네트워크 해킹과 보안 연습문제 5장  (1) 2024.04.29
[컴퓨터 네트워크] 네트워크 해킹과 보안 연습문제 3-4장  (0) 2024.04.29
[컴퓨터 네트워크] 네트워크 해킹과 보안 연습문제 1-2장  (1) 2024.04.29
[컴퓨터네트워크] 네트워크 개론 1장  (1) 2024.04.29
[컴퓨터 네트워크] 네트워크 개론 연습문제 1~7장  (4) 2023.10.30
[컴퓨터 네트워크] 데이터통신과 네트워크의 이해  (0) 2023.10.30
[컴퓨터 네트워크] 모두의 네트워크 연습문제 1장~9장  (1) 2023.10.30
'[ Computer Science ]/Computer Network' 카테고리의 다른 글
  • [컴퓨터네트워크] 네트워크 개론 1장
  • [컴퓨터 네트워크] 네트워크 개론 연습문제 1~7장
  • [컴퓨터 네트워크] 데이터통신과 네트워크의 이해
  • [컴퓨터 네트워크] 모두의 네트워크 연습문제 1장~9장
dev charlotte
dev charlotte
주 - 컴퓨터공학 / 복수 - 산업 보안
    250x250
  • dev charlotte
    int main() {
    dev charlotte
  • 전체
    오늘
    어제
    • 분류 전체보기
      • [ Laboratory ]
        • Paper review
        • Advanced Operating System
        • System Software & Storage
        • Lab etc
      • [ Computer Science ]
        • Algorithm_C++
        • Operating System
        • Information Retrieval
        • Database_sql
        • SW Engineering
        • Computer Network
        • JavaScript
        • Python
        • Data Structure
        • CS study
        • Distributed systems
      • [ Computer Security ]
        • Convergence Security
        • Web Security
        • PIMS
        • Network Security
        • Digital Finance
      • [ Artificial Intelligence ]
        • Trend
        • Seminar
      • [ 미래, 같이, LG ]
      • [ Development ]
        • [ Front-end ]
        • [ Back-end ] Spring 기본
        • [ Back-end ] Node.js
      • etc
        • 현대오토에버 스마트 모빌리티 공학 체험 교육
      • It's me
  • 블로그 메뉴

    • 링크

      • GitHub
    • 공지사항

    • 인기 글

    • 태그

      스마트모빌리티공학체험교육
      SSAFY
      공대생 대외활동
      프로그래머스 입문
      현대오토에버 스마트모빌리티
      ssafy 13기
      MySQL
      오블완
      현대오토에버
      SQL
      코딩 인강
      프로그래머스
      hotstorage
      데이터베이스
      프로그래머스 코테
      비전공자 코딩
      싸피
      싸피 13기
      spdk
      백준
      대학생 대외활동
      소프트웨어 공학
      SQL 쿼리
      현대오토에버 스마트 모빌리티
      코딩 교육
      자바스크립트
      티스토리챌린지
      프로그래머스 c++
      프로그래밍 언어론
      코드잇
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.4
    dev charlotte
    [운영체제] 혼자 공부하는 컴퓨터구조 + 운영체제 연습문제 9장~12장
    상단으로

    티스토리툴바