검색결과 리스트
글
유저영역
전역변수, static변수의 할당을 위해 존재하는 Data영역
지역변수 할당과 함수 호출시 전달되는 인자값들의 저장을 위해 존재하는 Stack 영역
동적 할당을 위해 존재하는 Heap영역으로 구성된다.
실행파일을 구형하는 명령어들이 올라가는 메모리 영역을 Code영역
Context Switching
Register Set - CPU 내에 존재하는 레지스터들은 현재 실행 중인 프로그램을 위한 데이터들로 채워진다.
그러므로 프로세스가 바뀔 때 현재 레지스터들이 가지고 있는 데이터들을 어딘가에 저장해야 한다.
Context Switching 할 때는 CPU가 아무것도 하지 못하기 때문에 부하가 많이 된다.
"실행되는 프로세스의 변경과젱에서 발생하는 컨텍스트 스위칭은 시스템에 많은 부담을 준다."
커널 오브젝트와 오브젝트 핸들
"커널에서 관리하는 중요한 정보를 담아둔 데이터 블록을 가리켜 커널 오브젝트라 한다."
프로세스가 생성될 때마다 PCB 변수가 하나씩 생성되고, 새롭게 생성된 프로세스 정보들로 초기화 되는데, 이 것이 바로 커널 오브젝트의 정체 이다.
프로세스 뿐만 아니라 쓰레드를 생성할때에도, IPC를 위해 사용되는 파이프나 메일슬롯을 생성할 때에도 커널오브젝트를 생성해서 필요한 정보들을 채워야 한다.
커널오브젝트에 할당되는 숫자! 핸들(Handle)
우선순위는 커널오브젝트에 저장된다.
커널오브젝트를 가리키기 위해서는 핸들을 이용한다.
Windows는 커널오브젝트를 생성할 때 마다 핸들이라는 정수값을 하나씩 부여한다.
"커널 오브젝트는 Windows 운영체제에 종속적이다."
커널 오브젝트는 프로세스에 종속적인 것이 아니라, 운용체제에 종속적인 관계로 커널 오브젝트의 소멸 시점은 운영체제에 의해서 결정된다.
커널 오브젝트는 프로세스에 종속적인 것이 아니라 운영체제에 종속적인 관계로 여러 프로세스에 의해서 접근 가능하다.
그러나 핸들은 운영체제에 종속적이 아니라 프로세스에 종속적이다.
usage count
CloseHandle
프로세스가 소멸된다고 해서 커널 오브젝트가 소멸된다고 할 수 없다.
프로세스는 각각 다른 메모리 공간을 가지고 있기때문에 서로 소통할 수 없다.
(메일 슬롯이나 파이프 사용)
Nonsignal - signal
커널 오브젝트가 생성되면 Non-signal 프로세스가 종료되면 Signaled가 된다.
핸들테이블 - 핸들 정보를 저장하고 있는 테이블로서 프로세스별로 독립적이다.
자식프로세스를 생성할 때 넘겨주는 인자에 따라 핸들테이블을 상속할 것인지를 결정할 수 있다.
자식프로세스와 부모프로세스는 각각 다른 메모리 공간을 사용하지만
프로세스와 쓰레드와는 스택영역만 다를분 다른 공간은 공유한다.
쓰레드의 특성
1. 스택을 독립적으로 할당받는다. ( 실행 흐름의 추가를 위한 최소 조건이 독립된 스택의 제공이다.)
2. 코드 영역을 공유한다. (쓰레드는 자신을 생성한 프로세스가 가지고 있는 함수를 호출할 수 있다.)
3. 데이터와 힘영역을 공유한다.(IPC가 필요 없다.)
- 전역 변수와 malloc 함수를 통해서 동적 할당된 메모리 공간은 공유가 가능하다.
컨텍스트 스위칭이 빨라진 쓰레드
"공유하는 영역이 많아서 빠르다"
커널영역?
하나의 프로세스에게 할당된 총 메모리 공간 중에서 유저영역을 제외한 나머지 영역
운영체제라는 하나의 소프트웨어를 실행시키기 위해서 필요한 메모리 공간을 커널 영역이라 한다.
커널레벨 쓰레드, 유저레벨 쓰레드
프로그래머 요청에 따라 쓰레드를 생성 및 스케줄링하는 주체가 커널인 경우(커널쓰레드)
커널레벨 쓰레드 - 안전하고 기능이 많다 / 커널모드와 유저모드 전환이 빈번해서 느리다.
유저레벨쓰레드 - 전환이 없어서 성능이 좋다 / 프로그래밍하기 어렵고 결과예측이 어렵다.
RECENT COMMENT