운영체제 OS

[운영체제/OS] 프로세서, 코어, Context Switching(문맥전환)

프로세서와 코어의 차이

 

processor: 컴퓨터의 분야에서 무엇인가를 처리, 가공하는 기능을 가진 하드웨어, 소프트웨어이다. CPU(중앙처리장치)는 하드웨어 프로세서의 대표적인 것인데, 컴퓨터 시스템 전체를 하나의 프로세서라 부를 수도 있다. 컴파일러 등을 언어 프로세서라 부르는 것처럼, 어떤 특정 기능, 처리를 하는 소프트웨어도 프로세서라고 부른다.

 

cores: 코어란 각종 연산을 하는 CPU의 핵심요소로, CPU 내부에는 코어 말고도 컨트롤러, 캐쉬메모리 등이 들어있다. 1개면 싱글코어, 2개면 듀얼코어, 3개면 트리플 코어라고 부르며, 많으면 많을수록 일반적으로 처리 속도가 빨라진다.

 

프로세스 동작방식 (메모리 배치(할당) 방식)

스택(stack): 일시적 데이터들 ex)함수 인자, 리턴 주소, 지역변수들

힙(heap): 동적 메모리(런타임때 할당됨)

데이터(data): 전역, 정적 변수들 

Context Switching(문맥전환)

 

하나의 프로세스가 CPU를 사용중인 상태에서 Interrupt 요청에 의해 (우선순위가 아니었던) 다음 우선순위의 다른 프로세스가 CPU를 사용하도록 하기 위하여

이전의 프로세스 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업.

즉, 프로세스의 상태 또는 Context를 교체하는 작업.

 

 

 

OS에서의 Context(문맥)는 CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들이다. 

한 프로세스의 문맥은 그 프로세스의 PCB에 기록된다. 

 

적재된 정보들 덕에 CPU가 전에 프로세스가 일하던거를 이어서 수행할 수 있는 것이다. 

 

PCB의 저장정보

- Process State 프로세스 상태 : 생성, 준비, 수행, 대기, 중지

- Process Counter 프로그램 카운터 : 프로세스가 다음에 실행할 명령어 주소

- Registers 레지스터 : 누산기, 스택, 색인 레지스터

- Process Number

 

대표적 인터럽트 요청 ---> Context Switching 일어나게 하는 애들

1. I/O request (입출력 요청할 때)

2. time slice expired (CPU 사용시간이 만료 되었을 때)

3. fork a child (자식 프로세스를 만들 때)

4. wait for an interrupt (인터럽트 처리를 기다릴 때)

 

 

참고로 우선순위는 OS의 스케줄러가 정한다.

그리고 Context Switch는 과도하게 반복되면 효율이 떨어진다(오버헤드 발생).

왜냐하면 Context Switch 발생시에는 CPU가 아무일도 못한다. 

 

 

 

Process Creation 프로세스 생성

Parent 포레스가 children 프로세스를 생성한다. 그래서 일종의 프로세스 트리 구조를 만든다. 

프로세스는 pid(process identifier)를 통해 identify되고 관리된다.

 

생성과정

storage의 실행가능한 binary 포맷이 memory로 이동된다.

runtime stack area 할당

heap area 할당(malloc(), free()와 같은)

I/O setup (stdin, stdout, stderr와 같은)

Control Migration이 OS부터 생성프로세스로 (Main()함수 시작) 

 

UNIX에서는 

fork()가 새 프로세스를 생성하고

exec()가 fork() 후 새 프로그램의 프로세스 메모리 공간을 대체합니다.

 

 

 

Process Termination 프로세스 종료 

exit() 시스템 콜 

child부터 parent로 wait()를 사용해 data를 리턴한다. (없으면 zombie 프로세스가 됨. wait() 없이 부모도 종료되면 orphan 프로세스가 됨) 

parent는 child프로세스 실행을 abort() 통해 종료할 수 있다.