티스토리 뷰

Linux

[Linux] Process

덕쑤 2014. 1. 22. 15:57

01. 프로세스와 프로세스 디스크립터 

1. 프로세스 이해 

- 프로세스는 시스템내의 자원(CPU,MEMORY, I/O(주변장치),파일)을 사용한다.

- 커널은 프로세스관리자이다. 

프로세스의 생성,전이,소멸 상태을 관리한다.

프로세스의 자원을 할당,제한,회수 한다.

-프로세스는 배치 시스템에서는 Job이라고 불리우면 시분할 싯템에서는 Task라고 불리운다. 

- 쓰레드(thread) 반드시 순차적으로 실행할 필요가 없는 기능들을 병행하여 실행함으로써 효율성을 높이기위한 개념

프로세스는 하나이상의 쓰레드로 구성된다.

1개면 단일 쓰레드 or 2개 이상이면 멀티 쓰레드

- 멀티 쓰레드    >> 여러 쓰레드가 병행하여 실해으 쓰레드간 자원을 공유함(메모리)

- 멀티 프로세스 >> 여러 프로세스가 병행하여 실행, 프로세스간에 자원 고유 안함 


02. task자료 구조체 

테스크(프로세스)가 생성되면 커널은 alloc_task_struct 메크로를 통해 커널영역의 메모리에서 8KB를 할당받아 '프로세스 디스크립터''커널 스택의 자료'를 저장한다. 

- 8KB는 task_union 공동체를 사용해서 관리한다.

- union task_union{

struct task_struct task;

ubsigned long stack[INIT_TASK_SIZE/sizeof(long)]

   }

- 8KB는 2페이지 크기이다.

- 2페이지의 아랫부분 1페이지는 디스크립터로 나머지 1페이지 윗부분은 커널의 스택으로 사용한다.

커널스택 -> 프로세스가 사용자 영역에서 커널모드로 전환시 커널이 해당 프로세스에 대해 사용하는 스택영역이다.


task_struct 구조체를 구성하는 맴버(유형별)

- 테스크 식별정보 : 다른 테스크들과 구별하는 정보 

pid-PID | pgrp-그룹ID | session-세션ID | tgid-쓰레드 그룹ID | leader 로 구분한다.

- 상태정보 

테스크의 상태를 크게 5가지로 나타낸다.

RUNNING : 태스크가 실행중이거나 준비상태 

INTERRUPTIBLE : 대기상태 

UNINTERRUPTIBLE : 대기상태 - but H/W인터럽트만 허용

ZOMBIE : 좀비상태

STOPPED: 수행중단 상태

- 스케줄링 정보 

need_resched : 우선순위 높은 다른 테스크가 시간할당을 모두 시비하여 스케줄러가 호출이 필요한경우 

policy : 스케중 정책 

rt_priority : 실시간 테스크 우선순위 

nice : 일반 테스크 우선순위 (-20 ~+19)

counter : tick(틱)단위로 CPU시간을 할당받기 위해 사용

- 테스크관계정보 

모든 케스크는 가족관계를 갖는다. (포인터를 이용햐 관계를 짓는다.)

*p_opptr, *p_pptr -부모 | *p_cptr - 자식 | *p_ysptr - 동생 | *p_osptr - 형 

원형 이중 연결 리스트로 연결 되있다.

- 시그널 정보 

시그널 : 테스크에게 비동적인 사건을 알려주는 매커니즘 

sig : 시그널 핸들러 정보 저장

pending : 대기중인 시그널 리스트

blocked : 블록된 시그널 

sigpending : 블록되지 않은 대기중인 시그널 있는지 표시 

- 콘솔 정보 

- 메모리 정보  

테스크의 명령어 및 데이터는 메모리 공간에 저장 >> 메모리 디스크립터에 저장한다. 

mm_stuct *mm : 메모리에 접근하기위한 포인터 변수 

mm_struct *active_mm : 테스크 실행시 사용하는 메모리 공간에 대한 정보를 가리킴 

// 일반적으로 둘다 같은 값을 가르키면 커널스레드 경우에만 전자는 null 이고 후자가 커널영역의 정보를 가진다. 

- 파일정보

테스크는 실행되면서 파일관리가 가능하다. 

struct flie_struct *files : 테스크가 오픈한 파일관리를 위한 포인트 변수 

struct fd_struct *fd : 이것을 통해 루트 디렉토리, 현재 작업중인 디렉토리에 접근가능 

- 문맥교환정보     

문맥 : 너널이 관리하는 테스크의 자원과 수행환경의 집합

- 시간정보 

real_timer : 타이머 핸들러에 대한 정보 

start_time : 테스크가 생성된 시간 

times : 사용자레벨과 커널레벨에서 테스크가 실행된 시간 

- 자원정보 

커널은 테스크가 사용할 수 있는 자원의 양을 제한해 과도한 자원의 사용을 막는다, 

struct rlimit rmilm[RPM_NLIMITS]

rlimit_cur 현재 서정된 허용된자원의 수 

rlimit_max 최대로 허용할 수 있는 자원의 수 

char comm[16] 테스크의 이름

- 기타정보 







'Linux' 카테고리의 다른 글

[Linux] setrlimit, getrlimit  (0) 2014.01.24
[Linux] Memory  (0) 2014.01.22
[Linux] fork, vfork 그리고 posix_spawn 이야기  (0) 2014.01.22
[Linux] System call 동작 구조 & System call 등록 순서  (0) 2014.01.11
[Linux] GRUB 정의 & 예제  (0) 2014.01.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함