Operating System 정리

Seunghee Lee·2023년 4월 3일

CS 스터디

목록 보기
5/10

🌿 시스템 콜

🔎 시스템 콜이란 ?

시스템 콜(System Call)은 운영체제가 응용 프로그램에게 제공하는 인터페이스 인터럽트 중 하나이다.

보통 사용자가 시스템 콜을 직접 사용하기보다는, 중간에 시스템 콜 인터페이스(System Call Interface)를 둬서 사용자가 시스템 콜을 통해 커널에 요청을 반환하는데, 이를 API라고 한다.


🔎 시스템 콜이 왜 필요해 ?

사용자가 직접 커널에 접근할 수 없기 때문에 시스템 콜을 통해 응용 프로그램에게 어떠한 기능을 수행해 달라고 요청한다.

운영체제는 커널 모드와 사용자 모드로 나뉘어 구동된다. 운영체제에서 프로그램이 구동되는 데 있어 파일을 읽고, 쓰고, 혹은 화면에 메시지를 출력하는 등 많은 부분이 커널 모드를 사용한다. 시스템 콜은 이러한 커널 영역의 기능을 사용자 모드가 사용 가능하게 해준다.


🔎 프로세스 관련 시스템 콜 4가지 설명해봐

프로세스 관련 시스템 콜은 fork() exec() wait() exit() 가 있다.

  1. fork()부모 프로세스를 자식 프로세스에 복제시키는 것이다.
    이를 통해 자식 프로세스가 생성되는데, 이때 자식은 부모의 context를 그대로 복사해서 가져온다.
  2. exec()fork()로 복제된 자식 프로세스에 새로운 프로그램을 덮어 씌우는 것이다. 이것으로 자식 프로세스는 독자적인 작업을 수행할 수 있게 된다.
  3. wait()부모 프로세스가 자식 프로세스가 종료되기를 기다리는 것이다.
  4. exit()프로그램을 종료시키는 시스템 콜이다.
    모든 자원을 반납하고 부모 프로세스에게 자신이 종료됨을 알린다.

🔎 시스템 콜 동작을 간단하게 설명해봐

(1) 각 시스템 콜에는 번호가 할당되고
(2) 시스템 콜 인터페이스는 이 번호에 따라 색인되는 테이블을 유지한다.
(3) 시스템 콜 인터페이스는 의도하는 시스템 콜을 부르고
(4) 시스템 콜의 상태와 반환 값을 돌려준다.


🌿 CPU 스케줄링

🔎 CPU 스케줄링이란 ?

CPU 스케줄링은 OS에서 프로세스들이 CPU를 사용하는 순서를 결정하는 것을 말한다.

여러 개의 프로세스가 실행되면 CPU는 하나의 프로세스에 대해 작업을 수행하고 다른 프로세스로 전환한다.

  • 이러한 전환을 스케줄링이라고 하며,
  • 스케줄러는 다음에 실행할 프로세스를 선택하는 알고리즘을 사용한다.
  • 대표적인 스케줄링 알고리즘은 FCFS, SJF, 우선순위,RR 스케줄링이 있다.

💡 스케줄링은 CPU의 이용률, 응답 시간, 처리량 등에 영향을 미친다. 대기 시간이 짧을수록, 처리 시간과 응답 시간이 빠를 수록 좋은 스케줄링이다.


🔎 선점형과 비선점형에 대해 설명해봐

선점형 스케줄링은 어떤 프로세스가 CPU를 할당받아 실행 중에 다른 프로세스가 강제로 CPU를 점유할 수 있다.

  • 모든 프로세스에게 CPU 사용 시간을 동일하게 부여할 수 있다.
  • 빠른 응답 시간을 요하는 대화식 시분할 시스템에 적합하다.

비선점형 스케줄링은 어떤 프로세스가 CPU를 할당 받으면 그 프로세스가 종료할 때까지 기다렸다가 종료되면 CPU를 할당받는다.

  • 스케줄러 호출 빈도가 낮아 문맥 교환에 의한 오버헤드가 적다.
  • 일괄 처리 시스템에 적합하다.

🔎 CPU 스케줄링 시 고려 사항

고려해야 할 5가지 사항으로는 CPU 이용률, 처리량, 응답 시간, 반환 시간, 대기 시간 이 있다.

  • CPU 이용률 : CPU 이용률 높여야 한다.
  • 처리량 : 스케줄링 알고리즘은 가능한 많은 프로세스를 처리하여 처리량을 높인다.
  • 응답 시간 : 짧은 응답 시간을 보장해야 한다.
  • 반환 시간 : 프로세스가 대기 상태에 있던 시간과 CPU 사용 시간을 합친 시간이다.
  • 대기 시간 : 가능한 대기 시간을 최소화해야 한다.

🔎 FCFS 스케줄링을 간단하게 설명해봐

FCFS(First Come First Served)는 먼저 들어온 프로세스를 먼저 처리해 주는 스케줄링 방식이다.

비선점형 스케줄링이다.

  • CPU가 할당된 프로세스의 작업이 종료될 때 다음 프로세스의 작업을 진행한다.

⚠️ 문제점 : 호위 효과 발생 !

  • 소요시간이 긴 프로세스가 먼저 도착해 CPU를 점유하면서 다른 프로세스가 오래 대기하게 된다.

🔎 SJF 스케줄링을 간단하게 설명해봐

SJF는 선점형/비선점형으로 나뉜다.

선점형 스케줄링

  • CPU를 점유한 프로세스 실행 중에 프로세스가 들어오면 현재 남아있는 프로세스와 버스트 시간을 비교하여 CPU를 점유할 수 있다.

비선점형 스케줄링

  • CPU를 점유한 프로세스 실행 중에 프로세스가 들어오더라도 CPU를 점유하지 못한다.

⚠️ 문제점 : 다음 CPU 버스트 길이를 알 방법이 없다.

  • 그래서 주로 임베디드 시스템에서만 사용한다.

🔎 우선순위 스케줄링을 간단하게 설명해봐

우선순위 스케줄링은 각 프로세스에게 우선순위가 주어지고, CPU는 가장 높은 우선순위를 가진 프로세스에게 할당된다.

  • 만약 우선순위가 같을 경우 → FIFO로 스케줄한다.

선점과 비선점으로 나뉜다.

  • 선점형 : 새로 도착한 프로세스의 우선순위가 현재 프로세스보다 높다면 선점할 수 있다.
  • 비선점형 : 단순히 준비 큐이 머리 부분에 새로운 프로세스를 넣고 CPU 실행이 끝날 때까지 기다린다.

⚠️ 문제점 : 기아 상태 발생 !

  • 부하가 과중한 컴퓨터 시스템에서는 높은 우선순위의 프로세스들이 꾸준히 들어와서 낮은 우선순위의 프로세스들이 CPU를 사용하지 못하게 될 수 있다.

💡 해결 : 에이징(aging)

  • 시스템에서 오래 대기하는 프로세스들의 우선순위를 점진적으로 증가시킨다.

🔎 RR 스케줄링을 간단하게 설명해봐

RR(Round Robin)은 각 프로세스는 돌아가면서 주어진 시간 할당량만큼 CPU를 할당받을 수 있다.

  • CPU 사용시간이 랜덤한 프로세스들이 섞여있을 경우에 효율적이다.
  • 시간 할당량이 너무 크면 → FCFS와 같아지고,
  • 시간 할당량이 너무 작으면 → 잦은 문맥교환으로 인해 오버헤드가 발생한다.

🌿 문맥 교환

🔎 문맥 교환이란 ?

문맥 교환(Context Switching) 은 컴퓨터 시스템에서 실행 중인 프로세스나 스레드 간에 작업을 전환하는 과정을 말한다.

  • 문맥 교환은 현재 실행 중인 프로세스/스레드의 상태를 저장하고 다음 실행될 프로세스/스레드의 상태를 복원하는 과정을 거친다.

🔎 문맥 교환이 이루어지는 과정을 설명해봐

  1. 현재 실행 중인 프로세스/스레드의 상태(Context)를 저장한다.
  2. 스케줄러에 의해 다음 실행될 프로세스/스레드가 선택된다.
  3. 선택된 프로세스/스레드의 상태를 복원한다.
    - 이는 저장된 정보를 다시 레지스터에 적재하고 실행을 계속하는 것을 의미한다.
  4. 선택된 프로세스/스레드가 실행된다.

🔎 문맥 교환 시 나타나는 문제점과 이를 해결하기 위한 방법에 대해 말해봐

CPU는 한 번에 하나이 작업만을 실행할 수 있기 때문에 문맥 교환 중에는 다른 작업을 작업을 할 수 없다. 이로 인해 오버헤드가 발생한다.

✅ 오버헤드를 해결하기 위해선 다음과 같은 방법이 있다.

  • 다중 프로그래밍의 정도를 낮춰 문맥 교환이 자주 발생하지 않도록 한다.
  • 스레드를 이용하여 문맥 교환 부하를 최소화시킨다.
  • 스택 중심의 장비에서는 Stack 포인터 레지스터를 변경하여 프로세스 간 문맥 교환을 수행한다.

🌿 교착 상태

🔎 교착 상태란 ?

교착 상태(Deadlock)는 두 개 이상의 작업(프로세스/스레드)이 서로가 가진 자원을 점유하고 있으면서, 상태방에게 할당된 자원을 원하게 되면서 결과적으로 무한정 기다리는(wait) 상태를 말한다.


🔎 교착상태가 발생하기 위한 필요조건 4가지

교착상태가 발생하기 위해선 상호배제 / 점유와 대기 / 비선점 / 순환 대기 를 동시에 만족해야 한다.

  • 상호 배제: 자원을 동시에 여러 개의 프로세스/스레드에 의해 사용될 수 없다.
  • 점유와 대기: 자원을 가진 상태에서 다른 자원을 얻기 위해 대기하는 프로세스/스레드가 존재한다.
  • 비선점: 이미 점유된 자원을 선점할 수 없고, 해당 작업이 끝날 때까지 기다린다.
  • 순환 대기: 서로 다른 작업 간에 자원을 기다리는 순환적인 관계가 형성되어야 한다.

🔎 교착 상태의 해결법

교착 상태의 중 하나를 제거하거나, 교착 상태가 발생하는 순간을 감지하고 복구하는 알고리즘을 구현한다.

  1. 예방
  • 교착 상태의 발생 조건 중 하나 이상을 제거한다.
  • 일반적으로 이 해결법이 많이 사용된다.
  1. 회피
  • 교착 상태이 발생할 가능성이 있는 상황을 회피한다.
  • 자원 할당 그래프나 은행원 알고리즘과 같은 알고리즘을 사용하여 안전한 상태에만 자원을 할당하도록 한다.
  1. 검출 및 복구
  • 교착 상태가 이미 발생했는지를 주기적으로 검사한다.
  • 만약 감지되면, 교착 상태에 있는 작업을 중단시키거나, 자원을 선점하여 해결한다.
  1. 무시
  • 교착 상태를 무시하고 시스템을 계속 진행하는 방법이다.
  • 이상적인 방법은 아니다.

🔎 은행원 알고리즘에 대해 설명해봐

은행원 알고리즘(Banker's Algorithm) 은 교착 상태 회피를 위한 알고리즘 중 하나이다.

은행월 알고리즘은 자원 할당 그래프를 기반으로 안전한 상태에서만 자원을 할당함으로써 교착 상태를 회피한다.

✅ 장점

  • 교착 상태의 가능성을 최소화하고, 자원 할당을 안전하게 수행할 수 있다.

✅ 단점

  • 안전한 자원 할당만을 허용하기 때문에 일부 자원이 대기 상태에 머물 수 있다.
    즉, 자원 이용률이 떨어진다.
  • 할당할 수 있는 자원 수가 일정해야 한다.
  • 최대 요구 자원의 양을 미리 알아야 한다.

🌿 페이징 & 세그먼테이션

🔎 페이징에 대해 설명해봐

페이징 은 프로세스와 메모리의 빈 공간을 작은 크기의 고정된 블록인 페이지로 분할하여 관리하는 방법이다.

  • 프로세스의 가상 메모리를 페이지 단위로 나누고, 이러한 페이지들을 실제 물리적인 메모리의 프레임에 매핑하는 방식으로 동작한다.
  • 각 페이지는 고유한 페이지 번호를 가지며, 해당 페이지 번호를 통해 물리적인 메모리 주소로 변환된다.

💡 외부 단편화를 해결하지만, 내부 단편화가 발생할 수 있다.

🔎 세그먼테이션에 대해 설명해봐

세그먼테이션 은 프로그래머가 인지하는 메모리 모습을 실제 메모리 모습으로 변환해주는 메모리 기법을 제공한다.

  • 가상 주소 공간을 논리적인 세그먼트 로 구성한다. 프로세스를 스택 / 힙 / 데이터 / 코드 로 나눈 것 역시 세그먼테이션의 모습이다.

💡 두 사용자 프로세스가 동일한 코드를 공유하기 용이하며, 내부 단편화가 발생하지 않는다.
💡 세그먼트 크기는 가변적이기 때문에 외부 단편화가 발생할 수 있다.


🔎 페이징과 세그먼테이션의 차이점은 ?

페이징은 고정 크기의 페이지로 분할하고, 세그먼테이션은 가변 크기의 세그먼트로 분할한다.


🔎 페이징과 세그먼테이션을 사용하는 이유는 ?

메모리 단편화를 해결하기 위해서 !

다중 프로그래밍에서 여러 프로세스를 수용하기 위해 주기억장치를 동적 분할하는 메모리 관리 기법이 필요하다.

profile
자라나라 개발개발 ~..₩

0개의 댓글