2015/07/16 245

15_스레드 라이브러리

15_스레드 라이브러리 스레드 라이브러리(thread library)는 프로그래머에게 스레드를 생성하고 관리하기 위한 API를 제공한다. 스레드 라이브러리를 구현하는데는 두 가지 방법이 있다. 커널의 지원 없이 완전히 사용자 공간에만 라이브러리를 제공하는 것. 라이브러리를 위한 모든 코드와 자료구조는 사용자 공간에 존재한다. 라이브러리의 함수를 호출하는 것은 시스템 호출이 아닌 사용자 공간의 지역 함수를 호출하게 된다. 운영체제에 의해 지원되는 커널 수준의 라이브러리를 구현. 라이브러리를 위한 코드와 자료구조는 커널 공간에 존재한다. 라이브러리 API를 호출하는 것은 커널 시스템 호출을 사용한다. [Pthread] Pthread는 POSIX(IEEE 10031.1c)가 스레드 생성과 동기화를 위한 제정한..

14_스레드 개념과 다중 스레드

14_스레드 개념과 다중 스레드 스레드(thread)는 CPU 이용의 기본 단위다. 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택 으로 구성 된다. 스레드는 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 열린 파일이나 신호와 같은 운영체제 자원들을 공유 한다. 프로세스에 하나의 제어 모델이 있으면 단일 스레드 이며, 프로세스가 다수의 제어 스레드를 가진다면 다중 스레드 모델이다. [다중 스레드의 장점] 다중 스레드 프로그래밍을 장점을 크게 네 가지로 분류하면 다음과 같다. 응답성(Responsivness) : 응용 프로그램의 일부분이 봉쇄 되거나 긴 작업을 수행하는 경우에도 프로그램의 수행이 계속 되는 것을 허용 함으로써 사용자에 대한 응답성을 증가 시킨다. 자원 공유(Reso..

13_클라이언트 서버 환경에서 통신

13_클라이언트 서버 환경에서 통신 클라이언트 서버 환경의 통신에서도 메시지 전달 기법을 이용하여 통신 한다. 통신 방식에서 3가지 유형에 대해서 살펴 보자. [소캣(Socket)] 소켓(socket)은 통신의 극점(EndPoint)를 뜻한다. 두 프로세스가 네트워크 상에서 통신을 하려면 양 프로세스마다 하나씩 총 두 개의 소켓이 필요하다. 클라이언트 프로세스가 연결을 요청하면 호스트 컴퓨터가 포트 번호를 부여한다. 이때 포트 번호는 1024(0~1024는 시스템 예약)보다 큰 임의의 정수가 사용된다. 모든 연결은 유일 해야 한다. 소켓을 이용한 통신은 분산된 프로세스들 간에 널리 사용되고 효율적이기는 하지만 너무 저수준이다. 우선 소켓은 쓰레드들 간에 구조화되지 않은 바이트 스트림만을 통신하도록 하기 ..

12_프로세스간 통신

12_프로세스간 통신 운영체제 내에서 수행되는 병행 프로세스가 시스템에서 실행중인 다른 프로세스들에 영향을 주거나 받지 않는다면 독립적인 프로세스라 하며 영향을 준다면 협력적인 프로세스라 한다. 프로세스 협력을 허용하는 이유는 다음과 같다. 정보 공유(Information Sharing) : 여러 사용자가 동일한 정보를 병행적으로 접근할 수 있는 환경을 제공해야 한다.(공유 파일 등) 계산 가속화(Computation Speed UP) : 특정 작업을 서브 태스크로 나누어 각각 다른 서브 태스크들과 병렬로 실행 되어야 한다. 모듈성(Modularity) : 시스템 기능을 별도의 프로세스들 또는 쓰레드 들로 나누어 모듈식 형태로 시스템을 구성하기를 원할 수 있다. 편의성(Convenience) : 개별 사..

11_프로세스에 대한 연산

11_프로세스에 대한 연산 대부분 시스템 내의 프로세스들은 병행 수행 될 수 있으며 반드시 동적으로 생성되고 제거되어야 한다. 프로세스는 실행 도중에 프로세스 생성 시스템 호출을 통해서 여러 개의 새로운 프로세스들을 생성 할 수 있다. 생성하는 프로세스를 부모 프로세스라 하며 생성된 새로운 프로세스들은 자식 프로세스라 부른다. 새로운 프로세스들은 다시 새로운 프로세스들을 생성할 수 있으며 그 결과 트리 구조의 프로세스가 형성 된다. 대부분의 운영체제들은 프로세스 식별자(PID)에 의해 프로세스를 구분하며 식별자는 정수 이다. 프로세스가 새로운 프로세스를 생성할 때 실행과 관련하여 두 가지 가능성이 있다. 부모가 계속해서 자식과 병렬로 실행 된다. 부모가 모든 자식 또는 일부 자식이 끝날 때까지 기다린다...

10_프로세스 스케줄링

10_프로세스 스케줄링 다중 프로그래밍의 목적은 CPU의 사용을 최대화 화기 위하여 항상 어떤 프로세스가 실행 되도록 하는데 있다. 시분할의 목적은 각 프로그램이 실행 되는 동안 사용자가 상호 작용할 수 있도록 프로세스들 사이에서 빈번하게 CPU를 교체하는 것이다. 위 두 개의 목적을 달성하기 위해 프로세스 스케줄러가 존재한다. 프로세스 스케줄러는 CPU에서 수행 가능한 여러 프로세스들 중에서 하나의 프로세스를 선택 한다. 단일 처리기 시스템에서는 실행 중인 프로세스가 한 개 이상 있을 수 없다. 만약 단일 처리기에 여러 프로세스들이 있다면 프로세스들은 CPU가 작업이 끝날 때까지 대기하여야 한다. 프로세스가 시스템에 들어오면 작업 큐에 놓여 진다.(메인 메모리 위치) 이 큐는 시스템 안의 모든 프로세스..

09_프로세스 개념

09_프로세스 개념 초기의 컴퓨터 시스템은 한 번에 하나의 프로그램만 수행 할 수 있었다. 현대의 컴퓨터 시스템은 메모리에 다수의 프로그램들이 적재되어 병행 수행되는 것을 허용 한다. 이러한 발전은 프로그램을 보다 견고하게 제어하고 보다 구획화 할 것이 필요 했다. 이러한 필요성으로 프로세스 라는 개념이 탄생 하였으며 프로세스는 수행중인 프로그램 이란 뜻을 가지게 되었다. 현대의 컴퓨터에서 프로세스란 시분할 시스템에서 작업의 단위이기도 하다. 프로세스는 일괄 처리 시스템 작업이나 시분할 시스템 사용자들의 태스크를 모두 지칭 한다. 또한 프로그램 카운터의 값과 처리기 레지스터의 내용으로 대표되는 현재 활동을 포함 한다. 프로세스는 일반 적으로 함수의 매개변수 복귀 주소와 지역 변수와 같은 임시적인 자료를 ..

08_시스템 부트

08_시스템 부트 하드웨어를 사용하려면 운영체제를 설치해야 한다. 하지만 운영체제가 설치 되었다고만 해서 하드웨어는 커널이 어디에 있는지, 어떻게 적재하고 사용 할까? 대부분의 컴퓨터 시스템에서는 부트스트랩 프로그램, 또는 부트스트랩 적재기로 알려져 있는 작은 크기의 코드가 커널을 찾고 그것을 메인 메모리에 적재하고 수행을 시작한다. 컴퓨터가 전원을 켜거나 재부팅 등의 명령을 받으면 명령 레지스터는 미리 지정된 메모리 위치를 가리키게 되고 그 곳에서부터 실행을 시작 한다. 그 위치에는 최초의 부트스트랩(bootstrap)이 존재한다. RAM은 시스템 시작 시에 알 수 없는 상태가 되기 때문에 이 프로그램은 ROM(Read only Memory) 안에 저장 된다.(흔히 BIOS라 불리는 영역) ROM은 초..

07_가상 머신(Virtual Machine)

07_가상 머신(Virtual Machine) 가상 머신(Virtual Machine)의 기본적인 개념은 한 컴퓨터의 하드웨어(CPU, 메모리, 디스크 드라이브, 네트워크 등)가 다수의 실행 환경을 제공하도록 추상화 하는 것이다. 각 개별적인 실행 환경이 자신만의 독립된 컴퓨터를 사용하는 환경을 제공 하는 것이다. 가상 머신을 구성하는 가장 큰 이유는 모두 동일한 하드웨어를 공유하면서 다수의 실행 환경(운영체제)을 동시에 수행 할 수 있다는 것이다. 또한 여러 가지 시스템 자원에 대해 완전한 보호가 이루어지므로 각 가상 머신은 강한 수준의 보안을 제공 한다. 그러나 동시에 가상 머신들은 자원을 직접적으로 공유 할 수 없어 가상 디스크를 공유하거나 네트워크 등을 통하여 공유 할 수 있다. 가상 머신의 접근..

06_운영체제 구조

06_운영체제 구조 운영체제와 같이 크고 복잡한 시스템은 적절하게 동작하고 쉽게 변경 될 수 신중히 제작되어야 한다. 일반 적인 접근 방법은 한 개의 일관된 시스템보다는 태스크를 작은 구성요소로 분리 하는 것이다. [간단한 구조(Simple Structure)] 운영체제는 처음에는 소형이면서 간단하고 제한된 시스템으로 시작 되었다. 최소의 공간에 최대의 기능들을 제공하도록 작성되어 있어서 모듈들로 주의 깊게 분할 되지 않았다. MS-DOS와 UNIX를 예를 들어 보자. MS-DOS : 인터페이스와 기능 계층이 잘 분리되어 있지 않다. 예를 들면 응용 프로그램이 기본 입/출력 루틴을 통하여 디스플레이와 디스크 드라이브에 직접 쓰기가 가능 하다. 이런 자유는 프로그램을 취약하게 만들었다. 따라서 사용자 프로..