워밍업클럽CS2기 1주차 발자국: 운영체제

워밍업클럽CS2기 1주차 발자국: 운영체제

image

운영체제

 

운영체제 들어가기

  • 운영체제 개요

    • 운영체제가 하는 일

      • 프로세스 관리

      • 메모리 관리

      • 하드웨어 관리

      • 파일 시스템 관리

         

  • 운영체제의 구조

    • 커널

      • 프로세스와 메모리, 저장장치를 관리하는 운영체제 핵심기능을 담당

      • 사용자는 운영체제 커널에 직접 접근할 수 없고, GUI나 CLI 등 인터페이스를 통해 접근 가능하다.

    • 시스템콜

      • 사용자로부터 커널을 보호하기 위한 인터페이스

      • 시스템 콜을 통해서 어플리케이션 접근

      • 사용자와 어플리케이션은 커널과 인터페이스로 시스템콜을 사용함

    • 드라이버

      • 하드웨어와 커널의 인터페이스

      • ex) 디바이스 드라이버

  • 컴퓨터 하드웨어와 구조

    • 버스

      • 데이터를 전달하는 통로로 cpu와 메모리를 연결함

    • 메인보드

      • 하드웨어를 연결하는 장치

      • 메인보드의 버스가 장치 간의 데이터 전송을 담당

    • CPU

      • 중앙처리장치로 ALU(산술논리연산장치), 제어장치, 레지스터 등으로 구성되어있다.

         

        • 레지스터

          • 계산을 위해 데이터를 임시로 보관하는 장치

    • RAM

      • 저장된 위치와 상관없이 읽는 속도가 같음.

      • 전력이 끊기면 데이터 손실

      • 메인 메모리로 사용한다.

    • ROM

      • 전력이 끊겨도 데이터 손실 없다.

      • 데이터를 한 번 쓰면 수정이 불가함.

      • 바이오스 저장용

  • 컴퓨터의 부팅과정

    • 전원버튼을 누른다.

    • ROM에 저장된 바이오스를 시작한다.

    • 하드웨어 이상 유무 체크

    • 부트로더 실행

    • 운영체제 메모리로 불러옴

  • 인터럽트

    • 폴링 방식 단점 해결

    • CPU는 명령을 내리고 완료되면 신호를 받아 인터럽트 서비스 루틴을 작업시켜 작업을 완료함.

    • 인터럽트 서비스 루틴은 특정 인터럽트가 들어오면 인터럽트를 처리하는 함수로 비동기적으로 동작하여 성능에 이점이 있음.

 

프로세스와 쓰레드

  • 프로그램과 프로세스

    • 프로그램

      • 저장장치에 저장된 명령문의 집합체로, 저장장치만 사용하는 수동적인 존재

    • 프로세스

      • 하드디스크에 저장된 프로그램이 메모리에 올라간 상태로, 실행중인 프로그램

      • 메모리, CPU 스케줄링 알고리즘에 따라 CPU도 사용, 입출력 하는 능동적인 존재

      • CODE, DATA, HEAP, STACK 영역으로 나누어짐

        • CODE 영역 : 실행하는 코드 저장

        • DATA 영역: 전역변수와 정적 변수 저장

        • HEAP 영역: 런타임 시 할당할 수 있는 공간 (동적으로 메모리 할당)

        • STACK 영역: 지역변수와 함수호출 했을 때 필요한 정보 (매개변수와 돌아갈 주소) 저장

    • 컴파일 과정

      • 전처리기 -> 매크로로 정의한 숫자 치환 및 필요한 파일 불러옴

      • 컴파일러 -> 어셈블리어로 변환

      • 어셈블리어 -> 기계어로 변환

      • 링커 -> 링킹 : 여러가지 라이브러리나 다른 소스코드로 연결

      • .exe로 만들어짐

      • 메모리에 올라가는 프로그램이 되어 프로세스가 됨 -> 운영체제에 의해 관리

         

  • 멀티프로그래밍과 멀티프로세싱

    • 유니프로그래밍

      • 메모리에 프로세스 1개

    • 멀티프로그래밍

      • 메모리에 여러개 프로세스

    • 멀티프로세싱

      • CPU가 여러개의 프로세스를 처리함

      • 메모리가 작았던 과거에는 스와핑 활용

        • 스와핑: 메모리에 있는 데이터를 다른 저장장치로 보내고 다른 저장장치에서 메모리에 올림

  • PCB

    • 프로세스가 만들어지면 운영체제는 해당 프로세스의 정보를 가지고 있는 PCB를 만들고 저장함

    • 연결리스트 자료구조로 저장됨

    • 프로세스가 종료되면 연결리스트에서 해당 프로세스의 PCB를 제거함

    • 구조 : 프로그램카운터, 레지스터 정보 등

  • 프로세스 상태

    • 생성상태: PCB를 생성하고 메모리에 프로그램 적재 요청 -> 승인

    • 준비상태: CPU 스케줄러에 의해 CPU 할당

    • 실행상태: 실행상태에 있는 프로세스의 수는 CPU 갯수 -> (초과 시 강제로 뺏고 준비상태로 돌아감)

      • 인터럽트: CPU가 명령어를 수행하다 자신이 처리할 수 없는 명령이면 스스로 인터럽트를 건다. -> CPU는 하던 일을 멈추고 해당 인터럽트를 처리하려고 함

    • 대기상태: 입출력 요청 시 완료될 때까지 기다림

    • 완료상태: 프로세스 종료, 사용한 데이터 메모리에서 제거, 생성된 PCB 제거

  • 컨텍스트 스위칭

    • 프로세스 실행 중 다른 프로세스를 실행하기 위해 실행중인 프로세스 상태 저장, 다른 프로세스의 상태값으로 교체

    • CPU 점유시간이 끝났거나, I/O 요청이 있거나 인터럽트가 있을 때 발생

    • 컨텍스트 스위칭 하는 상황

      • 프로세스 A의 점유 시간동안 실행 -> 초과 -> 인터럽트 발생 -> CPU 레지스터 값 등을 PCB A 저장 -> 프로세스 B 레지스터 값을 세팅 -> 프로그램 카운터(명령어 주소를 가지고 있음) 를 가지고 있어 명령어 바로 실행 가능 -> 프로세스 B 시간초과 -> 인터럽트 발생 -> 다시 프로세스 A 실행

         

  • 프로세스 생성과 종료

    • 프로세스 생성

      • 운영체제 부팅 후 0번 프로세스가 생성될 때 딱 한 번 실행됨

      • 다른 프로세스(자식 프로세스)들은 fork() 함수를 사용하여 0번 프로세스(부모 프로세스)의 코드영역, 데이터 영역, 스택영역 등 PCB 내용 모두 복사해서 사용 => 생성보다 복사가 빠름

         

      • 과정:

        .exe 파일 클릭 -> 운영체제는 프로그램의 코드영역과 데이터 영역을 메모리에 로드, 빈 스택과 빈 힙을 만들어 공간 확보 -> 관리하기 위한 PCB 생성 후 값 초기화

    • 프로세스 종료

      • 컴퓨터 껐다 키면 메모리가 초기화됨

         

  • 쓰레드

    • 쓰레드는 프로세스 내부에 위치, 프로세스 내의 쓰레드 : 운영체제가 작업을 처리하는 단위

    • 한 프로세스 내의 쓰레드들은 그 프로세스의 PCB, 코드, 데이터, 힙 영역을 공유함

       

    • 장단점

      • 안정성(프로세스 > 쓰레드)

        • 프로세스는 독립적으로 하나의 프로세스에 문제 생겨도 다른 프로세스는 영향 없음, 쓰레드는 해당 프로세스에 문제가 생기면 프로세스 내부의 모든 쓰레드에 영향있음.

      • 속도와 자원

        • 프로세스 간 통신은 오버헤드가 크고 속도가 느림

        • 스레드는 오버헤드가 작고 쉽게 공유할 수 있으나 공간에 문제가 생길 수 있음

 

CPU 스케줄링

  • CPU 스케줄링 개요

    • CPU 스케줄링

      • 운영체제는 모든 프로세스에게 CPU를 할당 및 해제하는 행위

      • 컴퓨터 성능에 큰 영향을 미침

  • 다중큐

    • 프로세스 정보를 담고 있는 PCB는 준비상태의 다중큐에 들어가서 실행되기를 기다리고 CPU 스케줄러에 의해 실행상태로 전환됨

    • CPU 스케줄러는 준비상태의 다중큐를 참조하여 어떤 프로세스를 실행시킬지 결정

  • 스케줄링 목표

    • 사용자가 사용하는 시스템에 따라 스케줄링 목표가 달라짐

  • FIFO

    • First In First Out : 먼저 들어온 작업이 먼저 나간다

    • 스케줄링 큐에 들어온 순서대로 CPU를 할당 받음 -> 먼저 들어온 프로세스 종료 후 다음 프로세스 실행

    • 장점

      • 단순함, 직관적

    • 단점

      • 한 프로세스가 끝나야 프로세스가 시작됨

      • 실행시간이 짧고 늦게 도착한 프로세스가 실행시간이 길고 빨리 도착한 프로세스의 작업이 끝날 때까지 기다려야함 => 평균 대기 시간이 길어지면서 스케줄링 성능이 안 좋을 수 있음.

댓글을 작성해보세요.

채널톡 아이콘