728x90

메모리 관리 기법중 하나로 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법

 

1. 사용자 프로그램이 물리 메모리의 제약에서 벗어남

2. 각 프로그램이 더 작은 메모리를 차지하기 때문에 더 많은 프로그램을 동시수행 가능

3. 프로그램을 메모리에 올리고 swap하는데 필요한 IO횟수가 줄어듦

 

 

가상 메모리 관리 : 지금 당장 실행해야 하는 부분만 메인 메모리에 저장하고 나머지 프로그램은 보조기억장치에 둔 채 동작하는 방법

실행할 프로그램 크기가 메인 메모리보다 크거나 개수가 많으면 메인메모리 내 공간이 부족해 프로그램이 제대로 실행되지 못하는 문제를 해결하기 위해 개발

 

페이징 기법 : 프로그램을 일정 크기로 나누어 페이지를 만들고 페이지 단위별로 메인메모리에 올려 동작하는 방식

 

페이지 테이블에서 몇번째 페이지가 물리 주소의 어느 주소 번지에 있는지 명시되어있다.

만약 32비트 머신이 있다고 치자.

그럼 프로세스가 접근할 수 있는 메모리 주소의 범위는 각 주소가 32개의 비트로 구성되어 있을 것이다.

32비트, 즉 2의 32승개의 고유한 주소를 나타낼 수 있다.

따라서 32비트 머신의 주소 공간은 최대 4GB이다.

 

페이지 폴트(Page Fault)란?

컴퓨터 시스템에서 프로세스가 요청한 메모리 페이지가 현재 물리적 메모리(RAM)에 존재하지 않을 때 발생하는 이벤트이다.

 

페이지 폴트 발생 과정

1. 프로세스가 페이지 접근 시도 : 프로세스가 특정 데이터에 접근 시도 시, 해당 데이터가 저장된 메모리 페이지에 접근

2. 페이지 테이블 조회 : CPU가 페이지 테이블을 조회하여 해당 가상 페이지가 물리적 메모리에 매핑되어 있는지 확인

3. 페이지 부재 확인 : 페이지 폴트 발생

 

페이지 폴트 처리 과정

1. 페이지 폴트 핸들러 호출 : 운영체제의 페이지 폴트 핸들러 호출

2. 디스크에서 페이지 로드 : 필요한 페이지를 디스크에서 물리적 메모리로 로드

3. 페이지 테이블 업데이트 : 페이지 테이블을 업데이트하여 새로 로드된 페이지의 물리적 메모리 주소 기록

4. 프로세스 재개 : 필요한 페이지가 메모리에 로드되면 프로세스는 중단된 지점에서 다시 시작

 

페이지 트레이드 오프(Trade-Off)란?

주로 가상 메모리 시스템에서 메모리 관리 전략과 성능 간의 균형을 맞추기 위해 고려되는 다양한 선택.

페이지 시스템에서는 메모리 사용의 효율성과 시스템 성능을 최적화 하려고 하는데, 이 과정에서 여러 가지 트레이드 오프가 발생

 

1. 페이지 크기

큰 페이지와 작은 페이지로 나뉜다.

2. 페이지 교체 알고리즘

최적 교체 알고리즘과 LRU(최근에 사용되지 않은 페이지 교체)와 FIFO알고리즘 사용

3. 페이지 파일 크기와 위치

큰 페이지 파일은 더 많은 가상 메모리, 작은 페이지 파일은 더 적은 가상 메모리

4. 메모리 할당 전략

최초 적합과 최적 적합

5. 프리페이징 수요페이징

초기에 로드 할 때 페이지 폴트를 줄일 수 있음, 실제로 필요한 페이지만 로드하여 메모리를 효율적으로 사용 가능

6. 쓰기 전략

즉시 쓰기, 지연 쓰기

 

페이지 크기가 커지면, 페이지 폴트가 더 많이 발생할까?

보통은 페이지 폴트가 감소한다. 

페이지가 크면 반대로 페이지 테이블 크기는 감소한다. 때문에 테이블 탐색하는 시간이 줄어든다.

한번의 페이지 폴트로 더 많은 데이터를 메모리에 로드할 수 있기 때문에 결과적으로 페이지 폴트의 빈도를 줄인다.

 

세그멘테이션 방식을 사용하고 있다면 가상 메모리를 사용할수 없을까?

세그멘테이션 방식

프로그램을 논리적 block으로 분할

block의 크기가 서로 다를 수 있음

때문에 메모리를 미리 분할할 수 없음

세그먼트를 공유, 보호하기 용이함

주소 매핑 및 메모리 관리의 오버헤드가 크다.

내부 단편화가 발생하지 않음(크기를 조절할 수 있기 때문, 외부 단편화는 생길 수 있음)

 

주소 매핑

가상 주소 : v = (s, d)

s는 세그먼트 번호, d는 오프셋

세그먼트는 논리적으로 분할되어 있어서 공유 및 보호가 용이하다.

페이징에서는 공유할 때 주소를 뛰어넘어서 공유를 해야했는데, 세그먼트는 논리적인 공간에서 공유가 용이해진다.

 

 

결국 세그멘테이션 방식도 가상 메모리 시스템의 한 형태이다.

 

 

페이지와 프레임의 차이

페이지

가상 메모리의 고정된 크기의 블록, 프로세스의 가상 주소 공간을 나누는 단위

프레임

물리적 메모리의 고정된 크기의 블록, 물리 메모리를 나누는 단위로 가상 메모리의 페이지가 매핑되는 대상

 

내부 단편화와 외부 단편화란?

내부 단편화

할당 된 메모리 블록 내에서 실제로 사용되지 않는 여유 공간이 생기는 현상

외부 단편화

메모리의 여러 작은 비어있는 블록들로 인해 전체적으로 충분한 메모리가 있음에도 불구하고, 큰 연속적인 메모리 블록을 할당할 수 없는 상태

 

페이지에서 실제 주소를 어떻게 가져올 수 있나?

 

어떤 주소 공간이 있을 때, 수정 가능한지 확인할 수 있는 방법

운영 체제에서의 메모리 보호기능

1. 페이지 권한 설정

2. 메모리 보호 오류 처리

3. 메모리 보호 관련 시스템 호출

4. 주소 공간 분할 (예 : 코드 영역은 실행만 가능하고 읽기만 가능한 권한, 데이터 영역은 읽기/쓰기 가능한 권한)

 

32비트에서 페이지 크기가 1KB라면 페이지 테이블의 최대 크기는?

페이지의 크기가 1KB인 경우, 1KB 페이지는 2^10바이트이다.

32비트 크기는 4GB(2^32)이다.

즉 페이지 테이블의 최대 크기는 2^32 / 2^10 인 2^22이다.

 

32비트 운영체제는 램을 최대 4G까지 사용가능하다. 그 이유는?

32비트 운영체제에서는 가상 주소 공간의 크기가 최대 4GB이므로 운영체제는 이를 기준으로 최대로 사용할 수 있는 램의 용량을 결정한다.

즉, 운영체제는 최대 4GB의 램을 사용하도록 설정된다.

 

C/C++ 개발을 하게 되면 Segmentation Fault라는 에러를 접할 수 있을 텐데, 이 에러는 세그멘테이션/페이징과 어떤관계가 있나?

세그멘테이션 오류는 프로그램이 잘못된 메모리 영역에 접근하여 발생하는 오류이다.

주로 배열 범위를 초과하거나 NULL포인터를 참조하는 등의 경우에 발생 가능하다.

세그멘테이션 오류가 발생할 때, 이는 가상 주소를 올바르게 페이징하지 못하거나 잘못된 물리 주소로 매핑될 수 있음을 의미한다.

 

 

Thrashing이란?

페이지 부재율(Page fault)이 증가하여 CPU 이용율이 급격하게 떨어지는 현상이다.

 

해결방법은?

Working set

지역성의 원리를 이용하여 지역성 집합이 메모리에 동시에 올라갈 수 있도록 보장하는 메모리 관리 방법이다.

 

Page Fault Frequency(페이지 부재 빈도)

프로세스의 페이지 부재율을 주기적으로 조사하고 이 값에 근거하여 각 프로세스에 할당할 메모리 양을 동적으로 예측하고 조절하는 알고리즘이다.

728x90

'기술 면접 > 운영체제' 카테고리의 다른 글

프로세스란?  (0) 2024.05.09
인터럽트란?  (0) 2024.05.09
시스템 콜이란?  (0) 2024.05.09
728x90

컴퓨터에서 실행중인 프로그램을 의미한다.

프로그램은 하드디스크 등의 저장공간에 저장되어 있는 코드와 리소스 등이 집합되어 있는 파일을 말하고 실행하면 메모리에 올라가서 프로세스로 동작한다.

다시 말해서 실행되는 프로그램들은 전부 프로세스라고 보면 된다.

 

1. 프로세스, 스레드의 차이

  1. 정의
    • 프로세스: 운영 체제에서 실행되는 프로그램의 인스턴스로, 각 프로세스는 독립적인 메모리 공간을 가지고 실행된다.
    • 프로세스는 자신만의 주소 공간, 파일 디스크립터, 시스템 자원, 스레드 등을 가진다.
    • 스레드: 프로세스 내에서 실행되는 작업의 단위로, 하나의 프로세스 내에서 여러 개의 스레드가 동시에 실행될 수 있다.
    • 스레드는 프로세스의 자원을 공유하며, 동일한 주소 공간에서 실행된.
  2. 자원 공유
    • 프로세스: 각 프로세스는 독립적인 메모리 공간을 가지고 있으므로, 프로세스 간에 자원을 공유하기 위해서는 명시적인 IPC(Inter-Process Communication) 메커니즘이 필요합니다.
    • 스레드: 같은 프로세스 내의 스레드는 메모리 공간을 공유하므로, 전역 변수나 힙 메모리 등의 자원에 대한 접근이 쉽습니다.

 

2. PCB란?

PCB는 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 자료구조이다.

프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB도 함께 제거된다.

  1. 프로세스 식별자(Process ID)
    • PCB에는 각 프로세스를 식별하는 고유한 식별자가 포함된다.
    • 이 식별자는 프로세스의 생성 순서나 다른 방식으로 할당된다.
  2. 프로세스 상태(Process State)
    • 프로세스의 현재 상태를 나타내는 정보이다.
    • 대기(waiting), 실행(running), 준비(ready), 종료(terminated) 등의 상태가 포함될 수 있다.
  3. 프로그램 카운터(Program Counter, PC)
    • 현재 실행 중인 프로세스의 다음 실행할 명령어의 주소를 나타내는 레지스터 값이다.
  4. 레지스터 상태(Register State)
    • 프로세스가 사용하는 CPU 레지스터의 상태를 저장한다.
    • 이는 프로세스가 다시 실행될 때 이전 상태로 복원할 수 있도록 도와준다.
  5. 스케줄링 정보(Scheduling Information)
    • 프로세스의 우선순위, 할당된 CPU 시간, 스케줄링 알고리즘과 관련된 정보 등이 포함된다.

 

 

3. 스레드 PCB

프로세스의 PCB와는 조금 다른 용도와 구조를 갖고 있다.

스레드의 PCB에는 해당 스레드에 대한 정보가 포함되어 있다.

  1. 스레드 식별자(Thread ID)
    • 각 스레드를 식별하는 고유한 식별자가 포함된다.
  2. 스레드 상태(Thread State)
    • 스레드의 현재 상태를 나타내는 정보로, 실행(running), 대기(waiting), 준비(ready) 등의 상태가 포함될 수 있다.
  3. 프로그램 카운터(Program Counter, PC)
    • 현재 실행 중인 스레드의 다음 실행할 명령어의 주소를 나타내는 레지스터 값이다.
  4. 스레드 레지스터 상태(Thread Register State)
    • 스레드가 사용하는 CPU 레지스터의 상태를 저장합니다. 이는 스레드가 다시 실행될 때 이전 상태로 복원할 수 있도록 도와준다.
  5. 스케줄링 정보(Scheduling Information)
    • 스레드의 우선순위, 할당된 CPU 시간 등 스케줄링과 관련된 정보가 포함된다.

 

4. 리눅스에서 프로세스/스레드 생성

  1. 프로세스 생성
    • 새로운 프로세스를 생성하기 위해서는 fork() 시스템 콜을 사용한다.
    • 이 시스템 콜은 현재 실행 중인 프로세스를 복제하여 새로운 프로세스를 생성한다.
    • 새로운 프로세스는 부모 프로세스의 상태를 상속받으며, 자신의 고유한 프로세스 ID(PID)를 갖는다.
    • 그 후, 새로운 프로세스는 exec() 시스템 콜을 사용하여 다른 프로그램을 실행할 수 있다.
  2. 스레드 생성
    • 리눅스에서는 POSIX 스레드(pthread)를 지원하며, POSIX 스레드는 pthread_create() 함수를 사용하여 생성된다.
    • 이 함수는 새로운 스레드를 생성하고 실행할 함수와 인수를 지정한다.
    • 새로운 스레드는 실행할 함수의 시작 지점에서부터 실행한다.
    • 새로운 스레드는 같은 프로세스 내의 다른 스레드와 메모리 공간을 공유하므로, 주의하여 동기화를 해야 한다.

 

5. 자식 프로세스가 상태를 알리지 않고 죽거나, 부모 프로세스가 먼저 죽게 될 때 처리법

  1. 자식 프로세스가 비정상적으로 종료된 경우
    • 자식 프로세스가 비정상적으로 종료되면, 리눅스에서는 부모 프로세스가 SIGCHLD 시그널을 받는다.
    • 이 시그널을 처리하는 일반적인 방법은 wait() 또는 waitpid() 시스템 콜을 사용하여 자식 프로세스의 종료 상태를 확인하는 것이다.
    • 이를 통해 자식 프로세스가 종료되었고, 종료 상태를 읽어들여 자원을 회수하고 관련 정보를 처리할 수 있다.
  2. 부모 프로세스가 먼저 종료된 경우
    • 부모 프로세스가 종료되면, 자식 프로세스는 고아 프로세스(Orphan Process)가 된다.
    • 리눅스에서는 고아 프로세스를 관리하기 위해 특별한 처리를 한다.
    • 부모 프로세스가 종료되면, 해당 자식 프로세스의 부모 프로세스가 init 프로세스가 되어 이를 책임지게 된다.
    • init 프로세스는 시스템의 초기 프로세스로, 고아 프로세스를 수집하여 정리하는 역할을 한다.
    • 따라서 자식 프로세스가 고아 프로세스가 되더라도 시스템에서 자동으로 처리된다.

 

6. 리눅스 데몬프로세스

리눅스 데몬 프로세스(Daemon Process)는 백그라운드에서 실행되는 프로세스로, 사용자와 상호작용 없이 시스템 서비스나 특정 작업을 수행한다.

데몬은 보통 부팅 시 자동으로 시작되어 시스템이 실행 중일 때 지속적으로 실행된다.

 

  1. 백그라운드 실행
    • 데몬 프로세스는 보통 백그라운드(background)에서 실행된다.
    • 즉, 사용자와의 상호작용이 없이 동작합니다.
  2. 부팅 시 자동 시작
    • 시스템이 부팅될 때 자동으로 시작되어야 하는 서비스나 프로세스로 사용된다.
    • 이를 위해 보통 초기화 스크립트(init scripts) 또는 systemd 단위 파일(systemd unit files)을 사용하여 설정된다.
  3. 세션 독립성
    • 데몬은 사용자 세션과 독립적으로 실행된다.
    • 사용자가 로그아웃하거나 종료해도 데몬은 계속해서 백그라운드에서 실행된다.
  4. 시스템 서비스 제공
    • 주로 시스템 서비스나 백그라운드 작업을 처리한다.
    • 예를 들어, 웹 서버(Apache), 데이터베이스 서버(MySQL), 로그 관리(daemonlogger) 등이 데몬 프로세스의 예시이다.
  5. 프로세스 관리 및 모니터링
    • 데몬은 프로세스 관리를 위해 시스템 리소스와 프로세스 상태를 모니터링하고, 필요에 따라 로깅 및 알림을 수행할 수 있다.

 

7. Init 프로세스

리눅스에서는 모든 프로세스가 프로세스 트리(process tree)를 형성한다.

이 트리의 루트 노드에 해당하는 프로세스는 init 프로세스이다.

init 프로세스는 시스템 부팅 시 가장 먼저 실행되는 프로세스이며, 모든 다른 프로세스는 init 프로세스의 자식이거나 자식의 자식으로서 프로세스 트리를 형성한다.

 

  1. 부팅 및 초기화
    • 시스템 부팅 시 필요한 서비스와 프로세스를 시작하고 초기화 한다.
  2. 서비스 관리
    • 백그라운드에서 실행되어야 하는 서비스들을 관리하고, 필요에 따라 시작하거나 중지한다.
  3. 시스템 리소스 초기화
    • 시스템 리소스를 초기화하고, 필요한 설정을 로드한다.
  4. 문제 해결 및 로깅
    • 부팅 및 서비스 시작 중 발생하는 문제를 감지하고, 로깅하여 시스템 관리자가 문제를 해결할 수 있도록 한다.
728x90

'기술 면접 > 운영체제' 카테고리의 다른 글

가상메모리란?  (0) 2024.05.15
인터럽트란?  (0) 2024.05.09
시스템 콜이란?  (0) 2024.05.09
728x90

인터럽트란 CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능이다.

 

대부분 컴퓨터는 한개의 CPU를 사용하므로 "한 순간"에는 하나의 일 밖에 처리할 수 없다.

때문에 우선순위가 더 높은 일을 처리할 필요가 있을 때 대처할 수 있는 방안이 필요하다.

그것이 인터럽트이다.

 

1. 인터럽트 처리 방식

  1. 인터럽트 발생
    • 하드웨어나 소프트웨어에서 인터럽트가 발생한다.
    • 예를 들어, 하드웨어 장치에서 데이터 전송 완료, 타이머 만료, 키보드 입력 등과 같은 이벤트가 발생할 수 있다.
  2. 현재 작업 중단
    • 프로세서는 현재 수행 중인 작업을 일시 중단하고, 실행 중인 프로그램의 상태를 저장한다.
    • 이는 중단된 작업을 나중에 다시 시작할 수 있도록 있게 다.
  3. 인터럽트 서비스 루틴 실행
    • 인터럽트 발생 시, 해당 인터럽트에 대한 처리를 담당하는 인터럽트 서비스 루틴(Interrupt Service Routine, ISR)이 실행됩니다.
    • 이 루틴은 인터럽트를 발생시킨 장치 또는 소프트웨어 이벤트에 따라 다르게 작동한다.
  4. 인터럽트 처리
    • ISR은 해당 인터럽트에 대한 필요한 작업을 수행한다.
    • 이는 주로 인터럽트 발생 이유에 따라 다르며, 예를 들어 장치에서 데이터를 읽어오거나, 시스템의 상태를 업데이트하거나, 특정 작업을 수행하는 등 다양한 작업을 포함할 수 있습니다.
  5. 현재 작업 재개
    • 인터럽트 서비스 루틴이 실행을 마치면, 프로세서는 원래 실행 중인 프로세스나 작업으로 복귀한다.
    • 이전에 저장한 프로그램 상태를 복원하여 중단된 작업을 계속한다.

 

2. Polling 방식

폴링(Polling)은 컴퓨터 시스템에서 외부 이벤트를 감지하기 위한 기술 중 하나로, 주기적으로 상태를 확인하여 이벤트가 발생했는지 여부를 확인하는 방법이다.

폴링은 주로 입출력 장치와의 상호 작용에서 사용된다.

  1. 장치 상태 확인
    • 폴링을 사용하는 시스템은 주기적으로 특정 장치의 상태를 확인한다
    • 이는 주로 특정 레지스터 값을 읽거나, 특정 비트를 확인하여 수행한다.
  2. 상태 확인 및 이벤트 처리
    • 장치의 상태가 변경되었는지 여부를 확인한다.
    • 상태가 변경되었다면, 해당 이벤트에 대한 처리를 수행한다.
    • 예를 들어, 장치에서 데이터가 도착했다는 것을 감지하고, 데이터를 읽어오는 등의 작업을 수행할 수 있다.
  3. 주기적인 반복
    • 폴링 방식은 지속적으로 장치의 상태를 확인하고 이벤트를 처리하는 과정을 반복한다.
    • 이는 장치의 상태가 변경되거나 이벤트가 발생할 때까지 계속한다.

 

  • HW / SW 인터럽트에 대해 설명해 주세요.

 

3. HW / SW 인터럽트

  1. 하드웨어 인터럽트:
    • 하드웨어 인터럽트는 주로 하드웨어 장치에서 발생하는 이벤트로, 외부에서 발생한 신호에 의해 컴퓨터 시스템의 CPU에 전달된다.
    • 이러한 인터럽트는 하드웨어 장치의 상태 변화를 나타내며, 예를 들어 데이터 전송 완료, 타이머 만료, 키보드 입력 등이 해당한다.
    • 하드웨어 인터럽트는 주로 입출력 장치와의 상호 작용에 사용되며, 장치의 상태 변화를 즉시 처리할 수 있도록 한.
  2. 소프트웨어 인터럽트:
    • 소프트웨어 인터럽트는 주로 프로그램 내에서 발생하는 이벤트로, CPU가 현재 실행 중인 명령어에 의해 생성된다.
    • 예를 들어, 프로그램이 시스템 콜을 호출하거나 예외 상황(예: 나누기 오류)이 발생할 때 소프트웨어 인터럽트가 발생한다.
    • 소프트웨어 인터럽트는 주로 프로세스 관리, 예외 처리, 시스템 호출 등과 관련된 작업에 사용된다.

 

4. 동시에 두 개 이상의 인터럽트가 발생할 때 처리방법

  1. 인터럽트 우선 순위:
    • 각 인터럽트에는 우선 순위가 할당되어 있고, 더 높은 우선 순위를 갖는 인터럽트가 먼저 처리된다.
    • 이는 하드웨어나 소프트웨어에서 지정된 방식으로 우선 순위가 관리된다.
    • 따라서 우선 순위가 높은 인터럽트가 먼저 처리되고, 그 후에 낮은 우선 순위의 인터럽트가 처리된다.
  2. 인터럽트 마스킹:
    • 시스템은 한 번에 하나의 인터럽트만 처리할 수 있기 때문에, 다중 인터럽트가 발생하면 다른 인터럽트를 일시적으로 마스크하여 처리 중인 인터럽트를 완료한 후에 처리할 수 있다.
    • 이를 통해 다중 인터럽트에 대한 우선 순위나 순서를 관리할 수 있다.
  3. 인터럽트 대기 큐:
    • 시스템은 인터럽트를 대기하는 큐를 유지하여 동시에 발생한 인터럽트를 처리하는 방식이다.
    • 인터럽트가 발생하면 해당 인터럽트를 큐에 추가하고, 우선 순위에 따라 큐에서 처리된다.
    • 이 방식은 다중 인터럽트를 효율적으로 처리할 수 있도록 한다.
728x90

'기술 면접 > 운영체제' 카테고리의 다른 글

가상메모리란?  (0) 2024.05.15
프로세스란?  (0) 2024.05.09
시스템 콜이란?  (0) 2024.05.09
728x90

시스템 콜이란 무엇인가?

 

시스템 콜(system call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.

 

 

운영체제는 커널모드(Kernel Mode)와 사용자 모드(User Mode)로 나누어진다.

위 사진과 같이 프로그램이 실행되는 것에 있어 파일을 읽고 쓰기, 출력하기 같은 기능을 커널모드를 사용하여 실행한다.

 

운영체제는 다양한 유저의 요구사항에 맞춰 하드웨어를 직접적으로 관리한다.

하지만 유저가 직접적으로 하드웨어를 접근하면 치명적인 오류를 일으킬 수 있다.

 

이를 방지하기 위해 응용 프로그램은 운영체제가 제공하는 인터페이스를 통해서만 하드웨어를 사용할 수 있다.

이러한 인터페이스를 시스템 콜이라고 한다.

 

1. 우리가 사용하는 시스템 콜의 예시

  • 파일 시스템 관련 시스템 콜 : 파일을 열거나 읽고 쓰고 닫기
  • 프로세스 관리 시스템 콜 : 프로세스 생성 / 새로운 프로그램 실행 / 프로세스 종료
  • 통신 관련 시스템 콜 : 소켓 생성 / 연결 요청/수락
  • 메모리 관리 시스템 콜 : 동적 메모리 할당 및 해제
  • 시간 및 날짜 관련 시스템 콜 : 현재 시간 가져오기
  • 디바이스 관리 시스템 콜 : 장치로부터 데이터를 읽거나 쓰기

 

2. 시스템 콜 실행 과정

  1. 사용자 프로그램에서 시스템 콜 호출
    • 사용자 프로그램이 운영 체제 기능을 요청하기 위해 해당 시스템 콜을 호출한다.
    • 이 호출은 일반적으로 프로그래밍 언어의 함수 호출과 유사한 형태를 가지고 있다.
  2. 커널 모드로 전환
    • 사용자 모드(user mode)에서 실행 중인 프로그램이 운영 체제의 권한이 필요한 기능을 호출하면, CPU는 커널 모드(kernel mode)로 전환된다.
    • 이는 보안을 유지하기 위해 필요하다.
  3. 인터럽트 발생
    • 사용자 프로그램이 시스템 콜을 호출하면, 인터럽트(Interrupt)가 발생하여 CPU의 제어를 운영 체제로 넘깁니다.
    • 이는 사용자 모드에서 커널 모드로 전환하고, 이 과정에서 특별한 인터럽트 번호나 지정된 레지스터 값이 전달된다.
    • 자세한건 이후 포스트에서.
  4. 시스템 콜 핸들러 실행
    • 운영 체제는 해당 시스템 콜을 처리하기 위한 적절한 핸들러 함수를 실행한다.
    • 이 핸들러 함수는 요청된 작업을 수행하고, 필요한 경우에는 다시 사용자 모드로 컨텍스트를 전환한.
  5. 작업 수행
    • 시스템 콜 핸들러는 요청된 작업을 수행한다.
    • 이는 파일을 읽거나 쓰는 것, 프로세스를 생성하는 것 등 다양하다.
  6. 결과 반환
    • 작업이 완료되면, 결과가 사용자 프로그램에 반환됩니다.
    • 이를 통해 프로그램은 계속 실행을 진행할 수 있다.
  7. 커널 모드에서 사용자 모드로 복귀
    • 작업이 완료되고 결과가 반환되면, CPU는 다시 사용자 모드로 전환된다.
    • 이후 프로그램은 원래의 실행 위치로 돌아가 계속 실행된다.

 

 

3. 시스템 콜 유형

시스템 콜은 주로 다음과 같은 네 가지 유형으로 구분된다.

  1. 프로세스 제어(System Calls for Process Control):
    • 프로세스 생성, 종료, 프로세스 간 통신, 그리고 프로세스 스케줄링과 관련된 시스템 콜이 있다.
    • 예시: fork(), exec(), exit(), wait(), kill()
  2. 파일 관리(System Calls for File Management):
    • 파일 및 디렉토리를 생성, 열기, 읽기, 쓰기, 삭제하고 파일 속성을 조작하는 시스템 콜이 있다.
    • 예시: open(), read(), write(), close(), mkdir(), rmdir()
  3. 장치 관리(System Calls for Device Management):
    • 하드웨어 및 입출력 장치와 상호 작용하기 위한 시스템 콜이 있다.
    • 예시: ioctl(), read(), write()
  4. 정보 관리(System Calls for Information Management):
    • 운영 체제 및 시스템 정보에 접근하고 관리하는 시스템 콜이 있다.
    • 예시: time(), getpid(), getuid(), getgid()

 

4. 운영체제의 Dual Mode

이중 동작 모드는 쉽게 말해 운영체제를 보호하기 위한 기법이다.

사용자와 운영체제는 시스템 자원을 공유하기 때문에, 사용자에게 제한을 두지 않으면 사용자가 메모리 내의 주요 운영체제 자원을 망가뜨릴 수도 있다.

이러한 점을 보호하기 위해 필요한 보호 장치가 이중 동작 모드(Dual Mode)이다.

위 그림을 보면 이중 동작 모드는 사용자 모드와 커널 모드로 구성되어 있다.

이들은 각각 사용자를 위한 동작과 운영체제를 위한 동작을 담당한다.

이 덕분에 사용자 모드에서는 불법적인 명령을 하지 못하게 한다.

 

중요성

만약 이중동작 모드가 없다면, 잘못된 사용자 프로그램이 데이터를 운영체제 부분에 덮어 기록하게 된다면?

그럼 운영체제가 날라가는거다.

그만큼 중요한 기능이다.

 

 

5. 시스템 콜 구분 방법

  1. 목적에 따른 구분:
    • 프로세스 관리(System Calls for Process Management): 프로세스 생성, 종료, 스케줄링 등과 관련된 시스템 콜.
    • 파일 관리(System Calls for File Management): 파일 및 디렉토리 관리, 파일 읽기 및 쓰기 등과 관련된 시스템 콜.
    • 메모리 관리(System Calls for Memory Management): 동적 메모리 할당 및 해제 등과 관련된 시스템 콜.
    • 장치 관리(System Calls for Device Management): 입출력 장치와의 상호 작용과 관련된 시스템 콜.
  2. 인터페이스에 따른 구분:
    • 유저 레벨 시스템 콜(User-Level System Calls): 사용자 레벨에서 호출되는 시스템 콜. 이들은 직접 운영 체제의 커널에 접근하지 않고, 라이브러리 함수를 통해 호출됩니다.
    • 커널 레벨 시스템 콜(Kernel-Level System Calls): 커널 내부에서 실행되는 시스템 콜. 이들은 사용자 프로세스가 운영 체제 커널에 직접 요청하는 것으로, 보안 및 권한 관리를 위해 커널 모드에서만 실행됩니다.
  3. 기능에 따른 구분:
    • 입출력 관리(System Calls for I/O Management): 파일, 네트워크, 디바이스 등과의 입출력 관련 시스템 콜.
    • 프로세스 제어(System Calls for Process Control): 프로세스 생성, 종료, 신호 처리 등과 관련된 시스템 콜.
    • 자원 관리(System Calls for Resource Management): 메모리 할당, 파일 및 디렉토리 생성, 삭제 등과 관련된 시스템 콜.
728x90

'기술 면접 > 운영체제' 카테고리의 다른 글

가상메모리란?  (0) 2024.05.15
프로세스란?  (0) 2024.05.09
인터럽트란?  (0) 2024.05.09

+ Recent posts