1. Process란?

  • 프로세스는 운영체제로부터 자원을 할당받아 실행하는 작업의 단위
  • 실행 중인 프로그램으로 → 메모리에 load 되어 있는 상태
  • 운영체제로부터 주소 공간, 파일, 메모리 등을 할당받는다
  • 스택, 힙, 데이터, 코드로 구성된 프로세스 메모리를 갖는다.
  • 비동기적 행위를 일으키는 주체
  • 프로세스 상태: New, Running, Waiting, Ready, Teminated

 

2. Process와 Program 차이점

  • 프로그램 : 명령어들의 집합 (Set of Instructions)
  • 프로세스 : 실행 중인 프로그램 (Program in excution)
    • 실행한다? 메모리에 로드되어 있는 상태

 

3. PCB (Process Control Block)

  • PID, 상태, PC (Program Counter), CPU register, 우선순위 등
  • Linked List 방식으로 관리함 → 삽입, 삭제 용이

 

4. 프로세스의 상태

 

new : 프로세스 생성중

프로세스를 생성하고 있는 단계로 커널 공간에 PCB가 만들어진 상태

 

ready : 프로세스가 CPU를 기다리는 상태

프로세스가 메모리에 적재된 상태로 실행하는데 필요한 자원을 모두 얻은 상태

아직 CPU를 받지는 않았지만 CPU를 할당받으면 바로 실행 가능한 상태

ready상태를 가지는 여러 개의 프로세스들이 존재할 수 있음

 

running : 프로세스가 CPU를 할당받아 명령어를 수행 중인 상태

일반적으로 CPU가 하나이기 때문에, 여러 프로세스가 동시에 실행돼도 실제로 실행 중인 프로세스는 매 시점 하나뿐임

 

blocked : 프로세스가 CPU를 할당받아도 당장 실행할 수 없는 상태

현재 프로세스가 I/O 작업 등을 을 처리 중 상태를 의미

                  

terminated : 프로세스의 실행 종료

프로세스의 실행이 완료되고 할당된 CPU를 반납, 커널 공간 내의 PCB는 남아 있음

 

suspended : 프로세스의 중지 상태

suspended 상태의 프로세스는 메모리를 강제로 뺏긴 상태로 특정한 이유로 프로세스의 수행이 정지된 상태를 의미하며, 외                  부에서 다시 재개시키지 않는 이상 다시 활성화될 수 없음 중기 스케줄러에 의해 디스크로 스왑 아웃된 프로세스의 상태가 대표적인 suspenden상태라 할 수 있음. suspended ready와 suspended  blocked가 있음

 

1. suspended ready : 준비 상태에 있던 프로세스가 디스크로 스왑 아웃

2. suspended blocked : 봉쇄 상태에 있던 프로세스가 디스크로 스왑 아웃

 

 

※ blocked?

프로세스 A가 CPU를 할당받고(running상태) 명령어를 실행하다 I/O 작업을 해야 하는 경우, 디스크 I/O 작업은 CPU 처리 속도에 비해 오래 걸리는 작업이기 때문에 디스크 I/O 작업 동안은 CPU를 점유하고 있어도 다음 명령어를 수행하지 못합니다. ㅡ> CPU 낭비

 때문에 디스크 I/O 작업을 하는 프로세스는 CPU를 반납하고 장치 큐에 가서 줄을 서게 된다(blocked 상태). 이후 디스크 컨트롤러에 의해 서비스를 받아 일을 수행하면(마그네틱 원판에서 원하는 데이터를 로컬 버퍼로 읽어오고 나면) 디스크 컨트롤러가 CPU에게 일을 끝났음을 알린다(인터럽트). 이후 프로세스 A는 장비 큐에서 빼내어 준비 큐로 넣어주고 프로세스 A가 한 일(로컬 버퍼에 저장)은 메모리에 올라가게 된다.

 

※ blocked와 suspended의 차이

blocked : 잠시 중지되어있다(blocked) 끝나면 다시 ready상태로 돌아옴 

suspended : 잠시 중지되어 있다(suspendedn) 누군가가 재개시켜줘야 다시 ready상태로 돌아옴.

 

 

5. 프로세스의 상태 변화

new  ㅡ>  ready

new 상태에서 OS에 의해 승인을 받아 프로세스가 생성되면 해당 프로세스의 PCB(Process Control Block, 커널 내 자료구조)이 OS 커널의 Ready Queue에 올라옴

 

ready ㅡ> running

Ready Queue에 있는 프로세스들 중에서 스케줄링 알고리즘에 의해 선택받은 프로세스가 CPU를 할당 받음

 

running ㅡ> ready

CPU를 할당받아 일을 하다 특정 이유로 다른 프로세스에게 CPU를 주고(dispatch) 다시 CPU를 기다림

 

1. time out : 프로세스 A가 정해진 시간만큼 CPU를 사용하고 CPU를 반납

2. interrupt : 프로세스 A보다 우선순위가 높은 프로세스 B가 Ready Queue에 존재하는 경우, 프로세스 B에게 CPU를 줌

 

running ㅡ> blocked

현재 CPU를 받아 명령어를 수행 중인 프로세스가 I/O 작업을 해야 하는 경우로 CPU를 반납하고 해당 장치 큐에 들어가게 되며 이 상태를  blocked 상태라 함

 

blocked ㅡ> ready

I/O 작업을 위해 장치 큐에 있던 프로세스가 디스크 컨트롤러에 의해 서비스를 받아 일을 하고 디스크 컨트롤러가 인터럽트를 발생하여 프로세스가 한 일을(로컬 버퍼에 저장된 데이터) 메모리에 올려놓고 프로세스는 다시 Ready Queue에 들어가게 됨 

                                                                            

running ㅡ> terminated

프로세스 실행이 완료되어 자원을 반납한 상태

 

blocked, ready -> suspended blocked, suspended ready

봉쇄, 준비상태에 있던 프로세스들이 어떠한 요인에 의해 suspended 상태

suspended blocked인 프로세스가 봉쇄되었던 조건을 만족하게 되면 suspended ready 상태로 바뀌게 된다. suspended 상태에 있는 프로세스들은 메모리를 조금도 보유하지 않고 디스크로 통째로 swap out 된 상태로 존재하게 된다

ex)) 대표적으로 메모리가 부족하여 봉쇄, 준비상태의 프로세스들이 디스크로 swap 되는 경우

 

 

6. Context-Switching : 프로세스 vs 스레드

  • 프로세스는 운영체제로부터 자원을 할당받아 실행하고, 스레드는 프로세스로부터 자원을 할당받아 실행합니다.
  • 프로세스 : fork()를 통해 생성되는데, 매번 동일한 코드가 복사되어 작동하고, PCB, 주소 복사 등 Context Switching에 Cost가 크다.
  • 스레드 : 레지스터와 스택을 제외하고 자원을 공유하여 사용 → 한 가지 스레드는 I/O를 담당하는 등, 스레드로 각 CPU에 일을 할당해서 수행 가능

 

 

 

 

 

Reference

[프로세스의 상태] https://kosaf04pyh.tistory.com/190

 

 

 

프로세스의 주소 공간

Code, Data, BSS, Heap, Stack

 

코드 (Code / Text)

  • 작성한 코드가 기계어 명령으로 변환되어 저장되는 영역
  • 이 부분은 컴파일 후에 바뀌지 않으므로 같은 프로그램에서 이 코드 부분을 공유하여 메모리 사용량을 줄이기 위해 존재

데이터 (Data)

  • 초기화된 전역 변수, 정적 변수와 배열, 구조체가 존재,
  • 프로그램 실행 시 생성, 종료 시 반환,
  • 함수 내부 정적 변수는 프로그램 실행 시 공간만 할당하고 함수 실행 시 초기화

BSS (Block Stated Symbol)

  • 초기화되지 않은 데이터 저장

힙 (Heap)

  • 동적 할당 (malloc, new)된 데이터가 저장, 런타임에 크기가 결정,
  • 힙 영역에 할당한 다 쓴 메모리를 반환하지 않으면 메모리가 부족해지는 것을 ‘메모리 누수’

스택 (Stack)

  • 임시 메모리 영역으로 지역 변수, 매개 변수, 반환 값 등이 잠시 저장, 함수의 호출이 끝나고 돌아갈 반환 주소, 함수 내의 지역 변수 등이 저장되는 정보를 ‘스택 프레임’이라고 함
  • 런타임에 크기가 결정되지만, 런타임에 스택의 총 사이즈를 변경 못함

추가 정보

  • 코드,데이터,스텍 영역은 컴파일러가 결정, 힙은 개발자가 결정
  • 스택은 상위 메모리부터 할당, 나머지는 하위 메모리부터 할당

오버플로우

  • heap overflow : heap이 주소 값을 채우며 내려오다가 stack 영역을 침범
  • stack overflow : stack이 밑에서부터 주소 값을 채우며 올라오다가 heap 영역을 침범

 

프로세스의 주소 공간

 

 

Reference

[동적 할당- 런타임, 컴파일 할당] 

 

'CS > 운영체제 (OS)' 카테고리의 다른 글

8. IPC (Inter-Process Communication)  (0) 2021.08.11
7. 프로세스 vs 스레드  (0) 2021.08.11
3. 인터럽트 (Interrupt)  (1) 2021.08.08
2. 커널 (Kernel)  (0) 2021.08.06
1. 운영체제 (OS) & 부팅과정  (1) 2021.08.06

개요

그동안 학교에서 배웠던 내용 + 전공책을 뒤져가며 공부했던 내용 + 취준 하면서 복습했던 내용들을 정리하는 목적으로 작성하였습니다.

 

1. 인터럽트(Interrupt) 란?

Interrupt는 프로그램 실행 중에 CPU의 현재 처리 순서를 중단하고, 다른 동작을 수행하도록 요구하는 것이라고 볼 수 있다. 즉, Interrupt가 발생하면 운영체제는 CPU에게 그동안 하고 있는 일들을 멈추고, Interrupt를 해결하도록 한다.

 

Interrupt가 발생하게 되면, ISR (Interrupt Service Routines)이라는 것이 실행되는데, 이를 인터럽트 핸들러(Interrupt Handler)라고도 한다

 

그렇다면 Interrupt는 어떤 때에 발생하는 것일까? Interrupt는 예외상황에 대한 처리가 필요한 상황에 발생한다. 예외상황에 따라 Interrup는 크게 (1) 외부 Interrupt, (2) 내부 Interrupt, (3) SW Interrupt로 나눌 수 있다.

 

 

1. 외부 Interrupt

외부 Interrupt는 CPU 코어 외부 요인으로 발생하는 것을 말하는데, 전기적인 신호로 CPU에게 Interrupt를 거는 경우로 (1) 전원 이상 Interrupt, (2) I/O Interrupt, (3) 타이머 Interrupt 같은 것들이 있다.

  1. 전원 이상 Interrupt의 경우,
    • 갑자기 전원 공급이 중단되는 경우 CPU에 Interrupt를 걸어 작업 중이던 프로세스를 대피시킬 수 있도록 한다.
  2. I/O Interrupt의 경우,
    • CPU가 I/O 장치 (키보드, 마우스, 프린터 등) 에게 일을 맡기거나, I/O 장치가 CPU에게 정보를 전달해 줄 때 호출된다.
  3. 타이머 Interrupt의 경우,
    • 컴퓨터 내부의 타이머가 CPU에 주기적으로 expired 되었다고 알림을 주는데, 이것이 Interrupt이다. 따라서 하나의 프로그램이 CPU 자원을 너무 오랫동안 점유하지 못하도록 한다. 또한 무한루프가 도는 프로그램도 이 덕분에 종료되고 Context Switch가 발생할 수 있다.
    • (참고) 타이머 Interrupt는 100hz로 인터럽트를 건다. 즉, 10ms 마다 interrupt가 걸린다.

 

 

2. 내부 Interrupt

내부 Interrupt는 CPU 코어 내부에서 프로그램이 실행되면서 Interrupt에 걸리는 경우로 프로그램 검사 인터럽트(Program check interrupt)이다. Exception Interrupt, 혹은 Trap이라고 부른다.  

  • Exception Interrupt (Trap
    • Division by zero
    • Overflow/Underflow
    • 기타 프로그램 Exception

Exception이라는 것은, 결국 예외상황에 대한 의미로, 소프트웨어 내부에서 예외상황을 처리하는 것을 두고 소프트웨어 Interrupt를 Exception으로 보는 경우도 있다. 

 

Trap의 의미는, 특별한 조건을 걸어두고 조건에 부합하는 경우 상황에 맞는 Service Routine이나 Handler 가 실행되도록 하는 것을 의미한다. 따라서 이 경우에는 ISR (Interrupt Service Routines) 혹은 인터럽트 핸들러(Interrupt Handler)가 되겠다.

 

Exception과 Trap 은 프로그래밍 전반적으로도 사용되는 용어이니, 결국은 단어를 어떻게 해석하느냐의 차이인 것 같다. 결국 너무 단어에 매몰되지 말고, 개념을 잘 익히는 것이 중요하다.

 

 

3. 소프트웨어 Interrupt

소프트웨어 Interrupt는 프로그램 처리 중 명령의 요청에 의해서 발생하는 경우로 SVC (SuperVisor Call) 이 있다.

  • SVC (SuperVisor Call)

일반적인 응용 프로그램은 User Mode에서 실행이 되는데, 이 경우 직접 접근할 수 있는 자원에 제한이 있다. 예를 들어 어떤 프로그램이 컴퓨터에 대한 통제권을 갖는 코드를 갖고 있다고 할 때, 이런 것이 허락도 없이 수행될 수는 없는 것이다. 즉, 이러한 자원에 접근하는 명령어는 Supervisor 만 실행할 수 있어야 하고, 이것이 즉, Kernel Mode가 되는 것이다. 즉, 응용프로그램은 SuperVisor Call을 통해 허락을 맡은 후 Supervisor Mode (=Kernel Mode)로 변경하고, 해당 명령을 실행 후, 다시 User Mode로 변경하는 과정을 거치게 된다.

 

운영체제가 제공하는 서비스에 대한 프로그래밍 인터페이스가 System Call이고, System Call을 실행시키기 위한 CPU 명령어가 SVC이다.

 

 

 

2. 인터럽트 처리 과정

요청 → 중단 → 보관 → 인터럽트 처리 → 재개

  1. 인터럽트 요청
  2. 프로그램 실행 중단
    • 현재 실행 중이던 Micro Operation까지 수행
  3. 현재 실행 중인 프로그램 상태 보관
    • PCB(Process Control Block), PC(Program Counter) 저장
  4. 인터럽트 원인 판별
    • 인터럽트를 요청한 장치를 식별 → 인터럽트의 원인을 파악 
    • Interrupt Vector 테이블을 참조하여 호출할 ISR (인터럽트 서비스 루틴)  주소 값을 얻음
  5. ISR (인터럽트 서비스 루틴) 처리
    • 실질적인 인터럽트 처리 작업을 한다.
    • 서비스 루틴 수행 중, 우선순위가 더 높은 인터럽트가 발생하면 재귀적으로 1~5 과정 수행한다
    • 인터럽트 서비스 루틴을 실행할 때 인터럽트 플래그(IF)를 0으로 하면 인터럽트 발생을 방지할 수 있다.
  6. 상태 복구
    • 상태 복구 명령어가 실행되면, 저장해둔 PC(Program counter)를 다시 복원하여 이전 실행 위치로 복원한다.
  7. 중단된 프로그램 실행 재개
    • PCB의 값을 이용하여 이전에 수행 중이던 프로그램을 재개한다.

 

 

3. Interrupt 관련 예시

(질문) 구글 검색창을 클릭 후 빈칸에 커서가 깜빡이고 있다. 이때 hello world를 작성하면 컴퓨터 내부에서 어떤 일이 발생하는가?

  • 사용자 입력 → 외부 Interrupt 중 I/O Interrupt 발생 → CPU 인지 → CPU 작업 중이던 상태 저장 → 해당 인터럽트 처리 → 상태 복구 및 중단되었던 작업 재개

 

 

질문

인터럽트와 시스템 콜의 차이에 대해서 설명하세요.

더보기

Interrupt

  • Interrupt는 프로그램 실행 중에 CPU의 현재 처리 순서를 중단하고, 다른 동작을 수행하도록 요구하는 것이라고 볼 수 있다.
  • 즉, Interrupt가 발생하면 운영체제는 CPU에게 그동안 하고 있는 일들을 멈추고, Interrupt를 해결하도록 한다.

System Call

  • 운영체제가 제공하는 서비스에 대한 프로그래밍 인터페이스가 System Call이고, System Call을 실행시키기 위한 CPU 명령어가 SVC이다.

 

 

Reference.

[인터럽트] https://jhnyang.tistory.com/167

[인터럽트] https://hibee.tistory.com/264

[SVC vs System Call] https://www.techopedia.com/definition/25808/supervisor-call

'CS > 운영체제 (OS)' 카테고리의 다른 글

8. IPC (Inter-Process Communication)  (0) 2021.08.11
7. 프로세스 vs 스레드  (0) 2021.08.11
4. 프로세스의 주소 공간  (1) 2021.08.08
2. 커널 (Kernel)  (0) 2021.08.06
1. 운영체제 (OS) & 부팅과정  (1) 2021.08.06

+ Recent posts