Skip to content

Latest commit

 

History

History
263 lines (192 loc) · 7.49 KB

02.process.md

File metadata and controls

263 lines (192 loc) · 7.49 KB

Process

Wikipedia: Process

프로세스의 요소

  • 프로그램을 실행하면 프로세스다.
  • 커널은 프로세스를 관리한다.
    • 커널은 프로세스마다 가진 고유 ID로 프로세스를 관리한다.
  • 프로세스는 가상 주소를 사용한다.
    • MMU에서 가상 주소가 실제 메모리 물리 주소로 변환된다.
    • 프로세스마다 메모리를 할당받아 서로 독립된 가상 주소 공간을 가지고 있다.

프로세스 병렬처리

UNIX V6는 여러 사용자가 시스템을 동시에 사용할 수 있다.

  • PDP11/40의 물리 CPU는 한 개다.
  • 실제 실행하는 프로세스는 한 개다.
  • 다른 프로세스는 대기한다.
  • Time Sharing System: 시분할 시스템

프로세스 상태

  • 실행 가능 상태
    • 실행 프로세스
    • 대기 프로세스(실행 가능한 상태)
  • 슬립 상태
    • CPU 자원 해제 기다리는 프로세스
    • 주변 장치에서 처리 끝나기 기다리는 프로세스
    • 처리를 계속 진행하지 않는 프로세스

사용자 모드, 커널 모드

프로세서 모드 = 두 가지 모드.

  • PSW: 모드 전환
    • 사용자 모드
    • 커널 모드
  • MMU: 메모리 공간 전환. 가상 주소 공간 전환
    • 사용자 공간: user space
    • 커널 공간: kernel space
  • 프로세스
    • 사용자 프로세스: user process
    • 커널 프로세스: kernel process
  1. 사용자 모드
    1. 커널 기능 사용 요구
    2. 시스템 호출
  2. PSW 모드 전환
    1. 커널 모드
    2. MMU 메모리 공간 전환
  3. 커널 처리
  4. PSW 모드 전환
    1. 사용자 모드
    2. MMU 메모리 공간 전환

Swapping

시스템 부팅 시 생성된 프로세스가 처리

  • Swap out: 스와핑 영역으로 이동
    • 슬립 상태 프로세스
    • 낮은 중요도 프로세스
  • Swap in: 메모리로 이동
    • 실행 가능 상태 프로세스

proc, user 구조체

프로세스 정보 관리

  • proc: 상태 정보. 메모리 상주
  • user: 제어 정보. 스와핑 대상

프로세스마다 각각 한 개씩 할당

proc 구조체

커널에서 항상 필요한 정보 포함

시스템 최대 프로세스 수 <= proc[] 엔트리 수 (50)

user 구조체

user.h

프로세스가 오픈한 파일이나 현재 디렉터리 정보 등 포함

실행 프로세스 외 user 구조체는 커널에서 필요하지 않다. 따라서 프로세스와 함께 스와프 아웃된다.

user 구조체 접근

커널 → 전역 변수 u → 실행 프로세스의 user 구조체 접근 가능

.globl	_u
_u	= 140000

프로세스의 메모리 할당

연속된 두 개의 물리 메모리 영역을 할당 받음

  • 텍스트 세그먼트
    • 읽기 전용
    • 여러 프로세스와 공유
    • 프로그램 실행 코드를 담는다.
  • 데이터 세그먼트
    • 다른 프로세스와 공유 불가
    • 프로그램의 변수 등을 담는다.
// /usr/src/sys/user.h

int	u_tsize;		/* 텍스트 세그먼트 크기. text size (*64) */
int	u_dsize;		/* 데이터 세그먼트의 데이터 영역 크기. data size (*64) */
int	u_ssize;		/* 데이터 세그먼트의 스택 영역 크기. stack size (*64) */
// /usr/src/sys/proc.h

struct	proc
{
	int	p_addr;		/* 데이터 세그먼트의 물리 주소. address of swappable image */
	int	p_size;		/* 데이터 세그먼트의 크기. size of swappable image (*64 bytes) */
} proc[NPROC];  /* /usr/sys/param.h L18 */

Data Segment

  • proc.p_addr: 데이터 세그먼트의 물리 주소
  • proc.p_size: 데이터 세그먼트 크기
    • PPDA (user struct + kernel stack area) + Data area + Stack area

PPDA, Per Process Data Area

커널 공간에서 사용한다.
가상 주소 공간에는 없다.

  • user 구조체
  • 커널 스택 영역: 커널의 작업 영역
// /usr/src/sys/param.h L62

#define	USIZE	16		/* size of user block (*64) */
  • 크기: 1 KByte = USIZE 16 x 64 Byte
  • 210 = 24 x 26

Data area

  • 변수 영역
    • 전역 변수
    • 정적 변수: bss
  • 힙 영역
    • 시스템 콜 호출 → 힙 영역 확장
    • 방향: 064 KByte 방향
  • user.u_dsize

Stack area

  • 함수의 매개변수
  • 로컬 데이터
  • 자동으로 확장: 064 KByte 방향
  • user.u_ssize

가상 주소 공간

MMU: 가상 주소 16 bit → 물리 주소 18 bit

  • 가상 주소 공간
    • = 용량: 64 KByte
    • 가상 주소 크기: 16 bit
  • 물리 주소 공간
    • = 용량: 256 KByte
    • 물리 주소 크기: 18 bit

가상 주소 공간 위치

  • 최하위 0x0: 텍스트 세그먼트 (크기: user.u_tsize)
  • 데이터 세그먼트
    • 0x0 + 8 KByte: 데이터 영역 (크기: user.u_dsize)
    • 최상위 0xffff: 스택 영역 (크기: user.u_ssize)

가상 메모리 장점

  • 물리 주소에 의존적이지 않다.
    • 스와핑이 편리하다.
    • 임의의 물리 주소로 할당될 수 있다.
  • 프로세스의 메모리 접근을 관리할 수 있다.
    • MMU 예외처리
      • 할당받지 않은 메모리 영역에 접근할 때
      • 접근 권한이 없는 영역에 접근할 때
  • 메모리 효율이 높다.
    • 물리 메모리를 분할하여 사용할 수 있다.
    • 하지만, Unix V6은 안 된다.
      • 연속된 두 개의 물리 메모리 영역을 할당 받음

주소 변환

MMU: 가상 주소 16 bit → 물리 주소 18 bit

APR, Active Page Register

가상 주소 + user 구조체 → APR(PAR / PDR)MMU물리 주소

  • PDP-11/40: APR 2개
    • 커널 모드: APR0 ~ APR7
    • 사용자 모드: APR0 ~ APR7
  • PSW의 모드 변경
    1. APR 변경
    2. MMU 가상 어드레스 공간 변환
  • APR 한 쌍 → 한 페이지
    • 블록 단위: 64 Byte
    • 최대 블록 개수: 128
    • 최대 할당 크기: 8 KByte = 128 블록 x 64 Byte
    • 8 x 1 Kbyte = 23 x 210 = 27 x 26
  • APR 8쌍 = 8 페이지
    • 최대 할당 크기 = 64 KByte = 8 x 8 KByte
PAR, Page Address Register
  • 11 ~ 0: 베이스 주소 (*64)
PDR, Page Description Register
  • 페이지 블록 수
  • 데이터 갱신
  • 메모리 방향
  • 읽기/쓰기 접근 제어

변환 과정

물리 주소 계산
  1. 가상 주소 크기 = 16bit
    1. 3bit: 페이지 선택 = APR 쌍 선택
      • APR의 PAR → 물리 주소의 베이스 블록 주소 (No.) 값
    2. 7bit: 가상 주소의 블록 No.
      • 물리 주소의 베이스 블록 No. + 가상 주소의 블록 No. → 물리 메모리의 블록 주소 (No.)
    3. 5bit: 가상 주소의 블록 내 오프셋
  2. 물리 주소 크기 = 18bit
    1. 12bit: 물리 메모리 블록 주소 (No.)
    2. 5bit: 가상 주소의 블록 내 오프셋
커널 APR
  • 전역 변수 u: 0140000
  • 2진수: 1100 0000 0000 0000
  • 앞 3자리 = 110 = 6 → APR 6번째 → PAR 6번째
  • 뒤 13자리 = 0 → 커널 공간의 6페이지의 처음 = 데이터 세그먼트 물리 주소 = proc.p_addr