RiverMoon Tech Blog
  • 운영체제 정리 #1
    2023년 10월 25일 21시 58분 02초에 업로드 된 글입니다.
    작성자: Moonsu99
    레지스터 설명
    프로그램 카운터(program counter; PC): 다음에 실행할 명령어의 주소를 기억했다가 제어장치에 알려줌. 명령어 포인터(instruction pointer라고도 함)
    명령어 레지스터(instruction register; IR): 현재 실행 중인 명령어를 저장
    메모리 주소 레지스터(memory address register; MAR): 데이터를 메모리에서 가져오거나 보낼 때 주소를 지정하는 데 사용
    메모리 버퍼 레지스터(memory buffer register; MBR): 메모리에서 가져오거나 옮겨갈 데이터를 임시로 저장. 항상 메모리 주소 레지스터와 함께 동작함

     

    메모리 보호

    메모리 보호란? 사용자의 영역의 작업이 운영체제 영역으로 침범하지 못하도록 막는 것

    메모리 보호가 되지않는 다면 프로그램을 파괴하거나 데이터를 지울 수 있다. 최악의 경우 시스템 멈춤

     

    캐시

    필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종으로 CPU가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다놓음

    cpu는 메모리에 접근해야 할 때 캐시를 먼저 방문하여 원하는 데이터가 있는지 찾아봄

     

    인터럽트(interupt)와 폴링(polling)의 차이와 개념

    인터럽트와 폴링은 이벤트를 처리하는 방법입니다.

    폴링은 이벤트를 수행하라는 신호를 받았는지 안받았는지를 주기적으로 검사하면서 그 신호를 받았을 때 이벤트를 실행하는 방식이고,

    인터럽트는 이벤트를 수행하라는 신호를 받으면 핸들러를 통해서 바로 이벤트를 수행하는 방식입니다.

     

    DMA

    입출력 관리자에게 CPU허락없이 메모리에 접근 할 수 있게 하는 권한

     

    저장장치의 계층 구조 

     

    속도가 빠르고 값이 비싼 저장장치를 CPU가까운 쪽에 두고 멀리갈수록 싸고 용량 큰거를 배치해서 두마리 토끼 다잡기.

     

    PCB: 프로세스 제어 불록(process control block)

    프로그램이 프로세스로 전환될 때 운영체제가 만드는 작업 지시서

    어떤프로그램이 프로세스가 되었다는 것을 운영체제로부터 프로세스제어블록을 받았다는 의미

     

    프로그램과 프로세스 개념

    프로그램: 저장장치에 저장되어 있는 정적인 상태

    ex) 레시피

    프로세스: 실행을 위해 메모리에 올라온 동적인 상태

    ex)요리

     

    프로세스가 되는과정

    프로세스= 프로그램+프로세스 제어블록(PCB)

    프로그램= 프로세스-프로세스제어블록(PCB)

     

    프로세스의 5가지상태

    생성상태 : 프로세스가 메모리에 올라와 실행준비를 완료한 상태, 프로세스 제어블록생성

    준비상태 : 생성된 프로세스가 CPU를 얻을때까지 기다리는상태

    실행상태 : 준비상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는상태

    대기상태 : 실행상태에서 입출력이 완료 될때까지 기다리는 상태

    완료상태 : 작업을 마치면 진입하는 상태, pcb가 사라짐

    cpu 스케줄러 : 준비상태에 있는 여러 프로세스 중 다음에 실행할 프로세스를 선정

    디스패치 : 맨 앞에있는 프로세스가 실행상태로 준비 → 실행 변경되는 것

    타임아웃 : 타임 슬라이스동안 작업을 다 못하면 준비상태로 돌아가는 것

     

    context switch 문맥교환

    문맥교환 즉 context switching 이라고함.

    프로세스를 바꿔주는 일 스케줄러

    스케줄러가 프로세스를 바꿔주는 것은 문맥교환이라고한다.

     

     

    시스템 호출

    fork( ) : 새로운 프로세스를 복사하는 시스템 호출

    • 복사하는 프로세스의 pid는 다르게만들어지고 ppid는 부모의 pid와 똑같이 생성된다.

    exec( ) : 프로세스는 그대로 둔 채 내용만 바꾸는 시스템 호출(완전 다른 프로세스로 전환)

    • 프로세스는 이미 만들어진 프로세스의 구조를 재활용
    • pid 둘다 동일 내용만 달라짐

     

    고아프로세스

    • 자식 프로세스가 종료되기 전에 부모프로세스가 먼저 종료되면 자식프로세스는 고아 프로세스가 된다.

    좀비프로세스

    • 자식 프로세스가 종료되었는데도 부모 프로세스가 뒤처리를 하지 않을 때 발생한다.

     

    프로세스와 스레드의 차이

    프로세스

    • 작업 전체 ,operation 단위
    • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)

    스레드

    • 세부로 나뉨 task단위
    • 프로세스에서 진행되는 여러흐름의 단위

    프로세스와 스레드 비교

    • 프로세스끼리는 약하게 연결되어어있는 반면 스레드끼리는 강하게 연결되어 있다.

     

    멀티스레드

    장점

    • 프로세스보다 가벼움,자원의 효율성,컨텍스트 스위칭 비용감소,응답시간 단축

    단점

    • 안정성문제,동기화로 인한 성능저하,데드락(교착상태)

    한 프로세스 내에서 동작되는 여러 실행의 흐름으로,

    프로세스는 하나에 자원을 공유 하면서 여러개의 스레드를 실행시킬 수 있음

     

     

    굳이 스레드를 사용하는이유

    • 프로세스 생성, Context switching 작업은 성능 저하가 발생하는데, 스레드를 생성하거나 switching 하는 것은 그에 비해 가볍다.
    • 두 프로세스가 하나의 데이터를 공유하려면 메시지 패싱이나 공유 메모리 또는 파이프를 사용해야 하는데, 이는 효율도 떨어지고 개발자가 구현, 관리하기도 번거롭다.

     

     

    선점형 스케줄링

    특징 시분할 시스템을 고려하여 만들어진 알고리즘, 할당중인 프로세스여도 강제로 빼앗을 수 있다.
    종류 라운드 로빈 스케줄링, SRT스케줄링, 다단계 큐 스케줄링, 다단계 피드백 큐 스케줄링
       

    비선점형 스케줄러

    특징 cpu를 할당받으면 끝날 때 까지 사용함
    종류 FCFS 스케줄링, SJF스케줄링,HRN 스케줄링
       
       

     

    스케줄링 기법 정리

    • 대기시간 공식 = 시작시간 - 도착시간
    • 반환시간 공식 = 대기시간 + 작업시간
    • 도착시간이 0이면 무조건 제일 먼저 실행해야 됨
    • 도착시간이 모두 같으면 작업시간(실행시간)이 짧은 순서대로
    • HRN 할때 작업시간 계산할 때, 도착시간을 포함해서 빼기
    • HRN은 도착시간을 기준으로 제일 짧은거 먼저 실행하고 하나 실행할 때 마다 우선순위를 다시 정해야함.

     

    기아 상태

    특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태

     

    race condition 경쟁조건

    2개 이상의 프로세스가 공유자원을 병행해서 읽거나 쓰는 상황

    경쟁 조건이 발생하면 공유 자원 접근 순서에 따라 실행 결과가 달라짐

    임계구역

    공유자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역을 임계구역이라고한다.

    공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 쓰느냐에 따라 그 결과가 달라질 수 있음

    임계구역 해결조건 3가지

    상호배제

    • 한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없다.

    ex) LOCK 상호배제를 보장해준다.

    한정대기

    • 어떤 프로세스도 임계구역에 진입하지 못하여 무한대기하지 않아야한다.

    진행의 융통성

    • 한 프로세스가 다른 프로세스의 진행을 방해해서는 안된다.

     

     

     

    상호배제조건을 충족하지 못한경우

    프로세스 P1이 while(lock == true);을 실행하고 바로 프로세스 P2가 while(lock == true);를 실행하면 둘 다 임계구역에 진입하는 상호 배제 문제가 발생한다.

    한정 대기 조건을 충족하지 않는 경우

    무한대기상황 - 한정대기조건을 충족하지 않는 경우

    1. p1이 lock1=true문 실행 후 cpu다씀 → p2가 실행상태로
    2. p2도 p1과 동일하게 실행 함 → p1이 실행생태로
    3. p2가 lock2=true 실행해서 P1은 while(lock2==true)에서 무한루프
    4. p1 도 lock1=true 실행해서 p2도 while(lock1==true)에서 무한루프

    결론 : p1, p2 둘다 while문에서 못빠져나와 한무루프 빠져 임계구역 진입못함. 프로세스는 살아있는데 진행이 안됨

    1. 다음 코드의 문제점을 설명하시오.

    (진행의 융통성을 총족하지 못하는 경우)

    한 프로세스가 두 번 연달아 임계구역에 진입하고 싶어도 그럴수없다. 프로세스의 우선순위에 상관없이 번갈아가며 임계구역에 진입하는 진행의 융통성 문제가 발생한다.

     

    프로세스 동기화

    수강신청할 때 프로세스들이 동시에 접근하려고 할 때 데이터 불일치등의 문제를

    발생하지 않도록 프로세스간에 순서를 정해서 데이터이 일관성을 유지할 수 있도록 하는 것

     

     

     

    대기가있는 통신(blocking comminiocation)

    • 동기화를 지원하는 통신 방식
    • 데이터를 받는 쪽은 데이터가 도착할 때까지 자동으로 대기 상태에 머물러 있음.
    • 자신의 작업 진행하다 다른 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것

    ex)spring boot , java

     

    대기가없는 통신(non-blocking communication)

    • 동기화를 지원하지 않는 통신 방식
    • 다른 작업에 관련 없이 자신의 작업을 하는 것.
    • 즉, 한번 요청을 쏘게되면 대기하지않고 바로 바로 자기가 할일을 하는 것이다.

    ex) node.js

     

     

    blocking/Non-Blocking

    blocking

    • 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 안돌려줌

    Non-Blocking

    • 호출된 함수가 자신이 할일을 채 마치지 않았더라도 바로 제어권을 건네주어 호출한 함수가 다른 일을 진행할 수 있도록 함.

     

     

     

     

     

    synchronous, Asynchronous, 피터슨 알고리즘, 데커 알고리즘 부터 다음 포스트에 작성하기

     

    댓글