프로세스는 0번지부터 시작하는 자기 자신만의 독자적인 주소 공간을 가진다 (stack, data, code)

가상 메모리 주소를 physical memory 주소로 변환(mapping)하는 하드웨어는 MMU(memory management unit)이다.

 

MMU는 CPU 안에 있으며 base레지스터(접근할 수 있는 물리적 메모리 주소의 최소값)의 값과 limit 레지스터(논리적 주소의 범위)의 값을 이용하여 주소를 변환한다.

여기서 인터럽트 처리 코드는 시스템 콜에 의해 호출되는 인터럽트 처리 함수를 말한다.

 

어떤 프로세스가 커널을 요청을 할때 커널 함수가 호출 되는데 중간에 context 스위칭이 일어날 수도 있으므로 

프로세스마다 커널 스택이 필요하다. 이들은 커널 프로그램 stack 영역에 저장된다.

PCB

운영체제는 새로운 프로세스를 만들때 PCB를 만들고 모든 프로세스들의 PCB는 커널 프로세스 data 영역에 보관된다.

 

PCB가 저장하는 정보

1. 관리상 사용하는 정보

PID, process state, priority, 스케줄링 정보

 

2. CPU 수행 관련 하드웨어 값

PC 레지스터 값 같은거

 

3. 메모리 관련

code, data, stack 의 위치 정보

 

4. 파일 관련

파일 서술자

 

출처 : https://core.ewha.ac.kr/publicview/C0101020140318134023355997?vmode=f

프로세스 상태

1. Running

프로세스가 CPU를 점유하고 있는 상태

CPU 스케줄러에 의해 ready queue에서 특정한 프로세스를 지정

 

2. Ready 

Running 상태에서 CPU 할당시간이 끝나 Timer 인터럽트에 의해 점유를 뺏기는 경우 (preempted)

I/O 요청을 기다리던중 (Block) I/O 끝났다는 인터럽트를 받은 경우

 

3. Blocked (wait)

CPU가 있어도 instruction을 수행 할 수 없는 상태 (I/O 작업중 이거나, 프로세스 Code 부분이 메모리에 올라와 있지 않은 경우)

block된 프로세스들은 device 큐와 ready 큐에서 관리된다.

커널 data 영역에 disk I/O queue, 공유 데이터에 대한 resource queue, cpu ready queue 등이 존재하는데 blocked된 프로세스들은 PCB 링크드 리스트로 구현되어 있다.

 

4. Suspended (inactive 상태)

프로세스가 통째로 swap area로 swap out 된 상태

외부에서 resume 명령을 해주어야 살아난다.

사용자가 직접 프로세스를 정지 시킬 수도 있다.

 

 

 

 

 

 

 

 

'운영체제' 카테고리의 다른 글

6. 프로세스 동기화  (0) 2022.06.09
5. CPU 스케줄링  (0) 2022.06.09
4. 프로세스 생성  (0) 2022.06.09
3. 스레드  (0) 2022.06.09
1. 컴퓨터 시스템 구조  (0) 2022.06.08

그림판으로 그린 컴퓨터 시스템 구조

CPU

cpu는 프로그램 카운터 레지스터가 가리키는 주소(main memory상)에 존재하는 instruction을 매 clock 읽는다.

Timer

특정 프로그램이 CPU를 독점하는 것을 막기 위한 하드웨어

CPU 스케줄러에 의해 새로운 프로세스가 CPU 제어권을 얻을 때 운영체제는 Timer에 시간을 기록하게 되는데, 이 시간은

cpu clock 마다 줄어드며 이 값이 0이되면 인터럽트를 발생시켜 CPU 제어권을 빼앗는다. (preemptive)

다중 프로그래밍을 위해 존재한다.

 

modebit

modebit : 0 ---> 커널모드

modebit : 1 ---> 유저모드

인터럽트나 예외 발생시 하드웨어가 modebit를 0으로 바꾼다.

운영체제 프로그램이 CPU를 점유하고 있으면 0, 사용자 응용 프로그램이 CPU를 점유하고 있으면 1의 값을 가진다.

 

커널 모드에서는 모든 instruction을 수행 할 수 있고

유저 모드에서는 한정된 instruction만을 수행 할 수 있다.

 

I/O 장치에 대한 접근과 같은 중요한 instruction을 사용자 응용 프로그램이 직접적으로 사용할 수 있게 하는 대신에 

사용자 프로그램이 소프트웨어 인터럽트(트랩)을 발생시켜 운영체제가 임무를 수행하도록 한다.

Interrupt line

인터럽트 발생여부를 확인하기 위한 일종의 배열? 매 클럭마다 체크하여 인터럽트 발생했으면 mode bit 0으로 바꾸고 

운영체제에 제어권을 넘긴다.

 

DMA controller

I/O 장치에 의해 interrupt가 너무 잦아 CPU의 성능이 떨어지기 때문에 DMA가 I/O 장치들의 local buffer 내용을 직접 메모리에 복사 할 수 있도록 함. I/O 로컬 버퍼에 페이지 단위 크기의 데이터가 쌓이면 그때 한번에 interrupt를 검

 

Memory controller

CPU와 별개로 메모리에 I/O local buffer 내용을 쓰는 DMA controller와 CPU가 동시에 메모리에 쓰지 않도록 관리

메모리 장치의 주소에 대한 읽기 쓰기 작업 관리

 

Device controller

device를 전담하는 작은 cpu 역할

 

응용 프로그램에서 I/O 처리 과정

1. 응용 프로그램에서 System Call을 한다 (커널 함수 호출)

2. 실행 중이던 프로세스 현재 상태를 저장한다.

3. 메인 메모리 커널의 Code 부분에 올라와 있는 인터럽트 벡터에 접근 (시스템 콜 번호에 따라 인덱스로 접근)

4. 해당 벡터 원소가 가리키는 인터럽트 처리 루틴 정의부로 이동

5. 운영체제는 올바른 요청인지 확인 후 I/O 컨트롤러에 요청

6. 아까 저장했던 프로세스 상태 복구

'운영체제' 카테고리의 다른 글

6. 프로세스 동기화  (0) 2022.06.09
5. CPU 스케줄링  (0) 2022.06.09
4. 프로세스 생성  (0) 2022.06.09
3. 스레드  (0) 2022.06.09
2. 프로세스  (0) 2022.06.08

+ Recent posts