27.08.2015 Views

리눅스 시스템 프로그래밍-미리보기

커널과 C 라이브러리로 풀어가는(개정2판) 로버트 러브 저/김영근 역 | 한빛미디어 | 2015년 01월 35,000원

커널과 C 라이브러리로 풀어가는(개정2판)
로버트 러브 저/김영근 역 | 한빛미디어 | 2015년 01월
35,000원

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

프로세스 여러 개가 실행되더라도 프로세스 각각이 전체 <strong>시스템</strong>을 독점하는 듯이 동작한다. 커<br />

널은 동작 중인 모든 프로세스가 <strong>시스템</strong> 프로세서를 공유하도록 빈틈없고 투명하게 프로세스<br />

를 선점하고 스케줄링한다. 프로세서 입장에서는 동작 방식에 대한 차이점을 결코 알지 못한<br />

다. 또한, 커널은 각 프로세스에 단일 선형 주소 공간 Single Linear Address Space 을 제공하므로 마치 프<br />

로세스 홀로 <strong>시스템</strong>에 존재하는 모든 메모리를 제어하는 것처럼 보인다. 커널은 가상 메모리와<br />

페이징 기법을 사용해서 프로세스마다 다른 주소 공간에서 동작하도록 만들기 때문에 여러 프<br />

로세스가 <strong>시스템</strong>상에 공존할 수 있는 것이다. 최신 프로세서는 운영체제가 독립적인 여러 프<br />

로세스의 상태를 동시에 관리할 수 있도록 하며 커널은 이런 하드웨어의 도움을 받아 가상화를<br />

관리한다.<br />

스레드<br />

각 프로세스는 실행 스레드(일반적으로 그냥 스레드라고 하는)를 하나 이상 포함한다. 스레드<br />

는 프로세스 내부에서 실행하는 활동 단위이며, 코드를 실행하고 프로세스 동작 상태를 유지하<br />

는 추상 개념이다.<br />

프로세스는 대부분 스레드 하나로만 구성되어 있는데 이를 싱글스레드라고 한다. 여러 스레드<br />

를 포함하는 프로세스를 멀티스레드라고 한다. 유닉스의 간결함을 중시하는 철학과 빠른 프로<br />

세스 생성 시간, 견고한 IPC 메커니즘 때문에 전통적으로 유닉스 프로그램은 싱글스레드였고<br />

스레드 기반으로 옮겨가려는 요구사항이 비교적 적었다.<br />

스레드는 (비스레드로 동작하는 프로세스 스택과 마찬가지로 독자적인 지역 변수를 저장하<br />

는) 스택, 프로세서 상태, 오브젝트 코드의 현재 위치(흔히 프로세서에 탑재된 명령어 포인터<br />

instruction pointer<br />

에 저장되어 있다)를 포함한다. 기타 프로세스에 남아 있는 대부분의 리소스는 모<br />

든 스레드가 공유한다. 이런 방식으로 스레드는 가상 메모리를 공유하고 가상 프로세서를 관리<br />

한다.<br />

내부적으로 <strong>리눅스</strong> 커널은 독특한 관점으로 스레드를 구현한다. 스레드는 단순히 (특히 주소<br />

공간을 비롯하여) 몇몇 리소스를 공유하는 일반적인 프로세스일 뿐이다. 사용자 영역에서 리<br />

눅스는 (Pthread라고 하는) POSIX 1003.1c에 따라 스레드를 구현한다. glibc의 일부인 현<br />

재 <strong>리눅스</strong> 스레드 구현 이름은 NPTL Native POSIX Threading Library 이다. 더 자세한 내용은 7장에서 살<br />

펴보겠다.<br />

1장 핵심 개념 소개<br />

51

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!