'2016/02/15'에 해당되는 글 4건

  1. 2016.02.15 RDC(Remote Desktop Connection)
  2. 2016.02.15 CPU
  3. 2016.02.15 스레드(Thread)의 기본적인 특성
  4. 2016.02.15 프로세스(Process) , 스케쥴링(Scheduling)


RDC 툴 사용법


http://max1013.tistory.com/entry/%EC%9B%90%EA%B2%A9%EA%B4%80%EB%A6%AC%ED%88%B4-RDCMRemote-Desktop-Connection-Manager-22-Release


'기타 정보' 카테고리의 다른 글

RDC(Remote Desktop Connection)  (0) 2016.02.15
Posted by GENESIS8

댓글을 달아 주세요

출처 : 위키 백과


중앙 처리 장치


CPU는 여기로 연결됩니다. 다른 뜻에 대해서는 CPU (동음이의) 문서를 참조하십시오.


중앙 처리 장치(中央處理裝置, 문화어: 중앙처리소자) 또는 CPU(영어: central processing unit)는 소프트웨어 명령의 실행이 이루어지는 컴퓨터의 부분, 혹은 그 기능을 내장한 칩을 말한다. 컴퓨터 안의 중앙 처리 장치(CPU)는 외부에서 정보를 입력 받고, 기억하고, 컴퓨터 프로그램의 명령어를 해석하여 연산하고, 외부로 출력하는 역할을 한다. 따라서 중앙 처리 장치(CPU) 는 컴퓨터 부품과 정보를 교환하면서 컴퓨터 시스템 전체를 제어하는 장치로, 모든 컴퓨터의 작동과정이 중앙 처리 장치(CPU)의 제어를 받기 때문에 컴퓨터의 두뇌에 해당한다고 할 수 있다. 실제의 CPU 칩엔 실행 부분뿐만 아니라 캐시 등의 부가 장치가 통합된 경우가 많다.


CPU에는 MCU(Micro Control Unit)와 주변 장치(외부 확장 장체에 관한 IC)가 다 들어있는 Soc(System One Chip)가 있다. 주변 IC가 따로 달려 있을 경우, 그것은 MCU라고 할 수 있다.


CPU는 기계어로 쓰인 컴퓨터 프로그램의 명령어를 해석하여 실행한다. CPU는 프로그램에 따라 외부에서 정보를 입력하고, 기억하고, 연산하고, 외부로 출력한다. CPU는 컴퓨터 부품과 정보를 교환하면서 컴퓨터 전체의 동작을 제어한다.


기본 구성으로는 CPU에서 처리할 명령어를 저장하는 역할을 하는 프로세서 레지스터, 비교, 판단, 연산을 담당하는 산술논리연산장치(ALU), 명령어의 해석과 올바른 실행을 위하여 CPU를 내부적으로 제어하는 제어부(control unit)내부 버스 등이 있다.


각종 전자 부품과 반도체 칩을 하나의 작은 칩에 내장한 전자 부품을 마이크로프로세서라고 한다. 마이크로프로세서는 전기 밥통에 쓰이는 낮은 성능의 제품부터 컴퓨터에 쓰이는 높은 성능의 제품까지 매우 다양하다. 마이크로프로세서들 가운데 가장 복잡하고 성능이 높은 제품은 컴퓨터의 연산 장치로 쓰인다. 이것을 중앙 처리 장치(CPU)라고 한다.


CPU의 출현

'고정된-프로그램 컴퓨터' 라고 불리는 ENIAC같은 컴퓨터는 다른 종류의 작업을 하기 위해 전선을 재배열 하는 과정이 필요했다. "CPU" 라는 용어가 소프트웨어의 실행을 위한 장치로 불리게 된 이래로, CPU라고 불릴 수 있는 장치의 출현은 프로그램 내장 방식 컴퓨터의 출현 덕분이었다.


프로그램 내장 방식 컴퓨터는 J.Presper Eckrt와 John Willian Mauchly's의 ENIAC 설계에도 이미 어느 정도 드러나 있다. 하지만 ENIAC을 빨리 제작하기 위해서 생략되었다. ENIAC이 만들어지기 전인 1945년 6월 30일 수학자 폰 노이만은 'EDVAC 초안에 대한 보고' 라는 논문을 발표했다. 이것은 프로그램 내장 방식 컴퓨터의 개요로써 1949년에 완전히 정립되었다. EDVAC은 일정한 수의 다양한 작업을 수행하기 위해 고안되었다. 확실한 것은, EDVAC 프로그램은 물리적 선의 연결이 아니라 빠른 속도의 컴퓨터 메모리에 저장된다는 것이다. 이것은 새로운 작업을 수행하기 위해서는 상당한 시간과 노력이 필요한 ENIAC의 한계를 이겨내는 데 도움을 주었다. 폰 노이만의 디자인은 소프트웨어(프로그램)을 단순히 메모리에 있는 내용을 바꾸는 것 만으로 손쉽게 실행할 수 있게 만들어 주었다. 하지만 EDVAC은 최초의 프로그램 내장방식 컴퓨터는 아니었다. 맨체스터 대학교의 SSEM(Small-Scale Experimental Machine)과 마크 1이 프로그램 내장 방식 컴퓨터의 초기 버전이다.


트랜지스터와 집적회로 CPU의 등장[편집]

트랜지스터 CPU는 트랜지스터가 발명된 이후 생긴다.


마이크로프로세서[편집]

페드리코 페긴이 1970년대에 발명한 것은 CPU의 설계와 구현에 대한 전반적인 기초를 완전히 바꾸어 놓았다. 1970년에 등장한 최초의 상업용 마이크로프로세서(Intel 4004)와 1974년의 최초의 범용 마이크로프로세서(Intel 8080) 이후로,생겼다 


연산[편집]

모든 CPU에서 메모리에 저장된 명령어들을 순서대로 불러와서 실행한다는 사실은 물리적형태와는 관계없이 동일하다. 그리고 CPU가 이 동작을 수행하기 위해서는 꺼내고, 해독하고, 실행하는 5단계가 필요하다. 마지막 단계에서 명령어를 실행하고난 이후에는 다시 이 다섯 단계의 명령 주기가 반복되며, 프로그램카운터의 변화된 위치에서 실행될 명령어를 불러오게 된다.


인출(Fetch)[편집]

첫번째 단계인 인출은 프로그램의 메모리에서 명령어를 불러오는 역할을 한다. 프로그램 내부의 명령어의 위치(주소)


해독(Decode)[편집]

두번째 단계인 해독은 인출 단계에서 가져온 명령어를 해독하여 명령어 내의 데이터 정보와 연산 정보를 추출한 뒤, 중앙처리 장치 내의 각 장치에 적절한 제어신호를 보내 연산, 처리에 대한 준비를 하는 단계이다.


실행(Execute)[편집]

명령어에서 추출한 두 데이터와 연산 정보를 이용해 실제로 연산을 하는 단계를 말한다. 연산이 끝난 결과는 곧바로 다음 명령어에서 사용될지, 그렇지 않을지에 따라 메모리 단계로 가던지, 라이트백 단계로 가던지 결정된다.


메모리(Memory)[편집]

네번째 단계인 메모리는 연산결과가 다음 명령어에 바로 사용되지 않는다면, 결과를 메모리에 저장하는 것을 말한다.


라이트백(Write-Back)[편집]

연산의 마지막 단계인 라이트백은 이전 명령어의 연산 결과가 다음 명령어의 입력 데이터로 사용될 경우, 계산 결과를 레지스터에 다시 쓰는 것을 말한다.


설계와 구현[편집]

CPU의 내장회로는 CPU가 수행할 수 있는 기본적인 연산들의 집합인 '명령어 집합'으로 이루어져있다. 예를 들면 두 개의 숫자에 대한 가감연산 혹은 비교연산 같은것이 있다. 각각의 기본 연산은 옵코드라고 불리는 특정한 비트의 조합으로 나타내진다.


모든 명령어의 실제 수학적인 연산은 CPU 내부의 산술논리장치(ALU, arithmetic logic unit)이라는 조합논리회로에서 담당한다. CPU는 대부분 산술논리장치가 연산을 수행하기 위한 명령어를 메모리로부터 불러오고, 연산의 결과값을 저장하는 일을 한다. 메모리로부터 데이터를 불러오는 연산의 명령어 집합의 종류와 동작은 확연한 차이를 보인다.


성능[편집]

싱글 코어[편집]

싱글 코어는 하나의 코어로 이루어진 CPU이다. 일반적으로 멀티 코어에 비해 경비가 싸고 프로그래밍도 간단하지만 보수 작업이나 고장의 경우에는 시스템이 완전히 멈추고 멀티 코어에 비해 처리 속도가 느리다는 단점이 있다.


멀티 코어[편집]

 이 부분의 본문은 멀티 코어입니다.

최근에 나오는 중앙 처리 장치의 성능은 크게 클록(Clock) 속도와 코어 수로 결정된다. CPU에서 클록이라고 하는 수치는 중앙 처리 장치 내부에서 일정한 주파수를 가지는 신호로 이 신호에 동기화되어서 중앙 처리 장치의 모든 명령어가 동작되게 된다. 예를 들어, 클록 수가 3.0GHz이면 초당 30억 번의 명령어 처리를 할 수 있다는 말이다. 따라서 클록 주파수가 빠를수록 제한된 시간에 더 많은 명령을 처리할 수 있기에 더 좋은 성능의 중앙 처리 장치라고 할 수 있다. 또, 중앙 처리 장치안의 코어의 수로도 성능의 차이가 난다. 코어는 중앙 처리 장치의 역할을 하는 블록으로 예전에는 한 개의 칩 안에는 한 개의 코어의 구조를 가졌으나, 최근에는 한 개의 칩 안에 여러 개의 코어를 가지는 구조를 채택하고 있다. 이렇게 한 개의 칩 안에 여러 개의 연산을 처리할 수 있는 장치를 병렬적으로 연결한 멀티 코어 시스템을 통하여 더 좋은 성능의 중앙 처리 장치를 얻을 수 있게 된다..


싱글 코어 및 다중 코어를 칭하는 명칭은 다음과 같다.


코어의 개수 명칭

1 싱글 코어

2 듀얼 코어

3 트리플 코어

4 쿼드 코어

6 헥사 코어

8 옥타 코어

10 데카 코어

12 도데카 코어

16 헥사 데시멀 코어





'프로그래밍 > 프로그래밍 공부' 카테고리의 다른 글

커널(kernel)  (0) 2016.02.17
재 진입성(re-entrant)  (0) 2016.02.16
CPU  (0) 2016.02.15
스레드(Thread)의 기본적인 특성  (0) 2016.02.15
프로세스(Process) , 스케쥴링(Scheduling)  (0) 2016.02.15
스트림(Stream)이란  (0) 2016.02.05
Posted by GENESIS8

댓글을 달아 주세요

원본 출처 :
http://egloos.zum.com/sweeper/v/2815395

1. 기본적인 특성

프로세스 단위의 컨텍스트 스위칭은 그 비용이 아주 비싸다.
왜냐면, [Code - Data - Heap - Stack]으로 이루어진 메모리가 모두 스위칭 되어야 하기 때문이다.

아주 다른 목적이 아닌, 하나의 프로세스 내에서 실행의 흐름을 바꾸면서 컨텍스트 스위칭 비용을 줄이기 위해서 고안된 것이 Thread 이다.
컨텍스트 비용을 줄이기 위해 고안되었다고 하는데, 아래 차이점을 보면 감이 올 것이다. 쓰레드는 하나의 프로그램 내에서 여러 개의 실행 흐름을 두기 위한 모델이다.
  • 쓰레드는 프로세스처럼 완벽히 독립적인 구조가 아니다. 쓰레드들 사이엔 공유하는 요소들이 있다. 쓰레드는 공유하는 요소가 있는 관계로 컨텍스트 스위칭이 걸리는 시간이 프로세스보다 짧다. 위 내용은 아래 프로세스와 쓰레드의 메모리 구조의 차이점을 그린 그림을 보면 더 이해가 편할 것이다.

프로세스는 자식 프로세스를 생성하더라도 자식 프로세스들은 모두 완전한 프로세스의 메모리 구조를 가진다.
이에 비해레드는 해당 프로세스와 [Code - Data - Heap] 영역은 공유하고, 자신만의 Stack 영역만 별도로 소유한다.
이는 쓰레드를 생성하는 함수의 파라미터 중 스택 사이즈를 지정하는 파라미터가 있음만 봐도 명확하다.

쓰레드는 프로세스 내 다른 실행 흐름을 가지기 위해 사용한다고 하였다.
실행 흐름을 다르게 가져가기 위해선 다른 함수 호출 시퀀스를 가져야 하고, 스택 영역이 별도로 있어야 하는 이유이다.

암튼, 위에서 보듯이 쓰레드는 Stack 영역만 별도로 소유함으로써 프로세스 대비 쓰레드간 컨텍스트 스위칭은 비용이 적은 것이다.

특히 캐쉬 메모리의 활용 측면으로 넘어가면 그 비용의 차이는 더 커진다.
프로세스 컨텍스트 스위칭시에는 모든 데이터 영역이 갈아엎히기에 캐쉬 메모리가 싹 비워져야 하지만, 쓰레드의 경우엔 그렇지 않다. 

다시 한번 정리하면 메모리 관련 쓰레드의 특성은 다음과 같다.
  • 쓰레드마다 독립된 스택을 할당해 준다.
  • 쓰레드마다 고유의 CPU 레지스터값 세트를 가진다. (그래야 쓰레드 스위칭 이후 실행하던 지점으로 돌아갈 것 아닌가?)
  • 코드 영역을 공유한다.
  • 힙 & 데이터 영역을 공유한다.
    : 이로 인한 동기화 문제는 후~


2. 프로세스와 쓰레드

사실 Windows OS에서 프로세스는 단순히 쓰레드를 담는 상자에 불과하다고 해도 과언이 아니다. 모든 프로세서는 별도의 쓰레드를 생성하지 않더라도 Main 쓰레드를 통해 동작하기 때문이다.

프로세스 챕터(http://sweeper.egloos.com/2814918)에서 정리했던 스케쥴링은 사실 쓰레드에 적용되는 것들이다.


3. Kernel Level 쓰레드

(이 내용은 음...굳이 뭐...그냥 적어봄)

쓰레드를 누가 생성하고 관리하느냐에 따라 커널 레벨 vs 유저 레벨 쓰레드로 나눌 수 있다. 우리가 사용하는 Windows이든 Linux이든 우리가 흔히 접하는 모든 OS는 커널 레벨 쓰레드를 사용한다.

즉, 쓰레드를 생성하고 스케쥴링하는 주체가 커널인 것이다.

쓰레드를 생성하는 것만 보아도 쉽게 알 수 있다.
우리는 쓰레드 생성시 쓰레드 커널 오브젝트의 오브젝트 핸들을 넘겨 받는다.


'프로그래밍 > 프로그래밍 공부' 카테고리의 다른 글

재 진입성(re-entrant)  (0) 2016.02.16
CPU  (0) 2016.02.15
스레드(Thread)의 기본적인 특성  (0) 2016.02.15
프로세스(Process) , 스케쥴링(Scheduling)  (0) 2016.02.15
스트림(Stream)이란  (0) 2016.02.05
압축  (0) 2016.01.28
Posted by GENESIS8

댓글을 달아 주세요

원본 출처 :
http://sweeper.egloos.com/2814918

프로세스에 대해 간략하게 리마인드 차원에서 정리한다.

사실 Windows OS에서 프로세스는 쓰레드를 감싸고 있는 박스떼기에 불과하다고 해도 과언이 아니지만,
개념적으로 접근하기 위해 쓰레드보다는 프로세스를 주인공 취급하여 설명토록 하겠다.

귀찮아서 정리할 지 안할 진 모르겠지만, 이후 쓰레드 기초 내용 정리에서 다시 이에 관련된 내용들이 나올 것이다.

------------------------------------------------------------------------------

1. 프로세스란?


실행중인 프로그램의 instance


2. 프로세스의 구성 요소

1) 프로그램 실행시 메모리 구조

Code : 실행 파일을 구성하는 명령어(기계어)들이 올라가는 공간
Data : 프로그램이 종료될 때까지 지워지지 않는 데이터를 저장하는 공간. 대표적으로 전역/Static 변수가 있다.
Heap : 동적으로 할당되는 메모리를 위한 공간
Stack : 함수 내 지역 변수 및 함수 매개변수, 함수 반환 주소

2) Register set

실행 중인 프로세스에 관련된 데이터들고 CPU 내 레지스터들이 채워지기에 역시 구성 요소로 포함할 수 있다.


3. 프로세스 스케쥴링

멀티 프로세스 운영체제에서 하나의 CPU가 복수의 프로세스를 실행하기 위해선 스케쥴링이 필요하다.

프로세스 스케쥴링 방식에 따라 OS를 크게 두 가지 방식으로 나눌 수 있다.

1) Non-Preemptive OS

비선점형 OS는 현재 실행 중인 프로세스보다 높은 우선순위를 가지는 프로세스가 실행된다고 해서 실행 대상을 바로 변경하지 않는다.
새로 실행된 보다 높은 우선순위의 프로세스가 실행되기 위해서는 현재 실행 중인 프로세스가 명시적으로 CPU를 양보할 때까지, 혹은 I/O 작업 등으로 블로킹 상태가 될 때까지 기다려야만 한다.

과거 Windows95 이전, 그리고 Mac OS X 이전의 OS들이 비선점형 OS 였으며, 그 이후의 모든 OS는 선점형 OS 이다.

2) Preemptive OS

선점형 OS는 실행 중인 프로세스보다 높은 우선 순위의 프로세스가 실행되면, 스케쥴러에 의해 실행 순서가 적극 조정되는 OS를 얘기한다.

또한, 비선점형 OS에 비해 훨씬 더 스케쥴링이 복잡하게 처리가 되어 있는데, 우선 순위가 같은 프로세스들간 실행 배분에도 관여를 하기 때문이다.

최근의 모든 OS는 선점형 OS이며, Windows OS에서 선점형 스케쥴링 알고리즘으로 채택하고 있는 두 가지를 소개하겠다.

1. Priority Scheduling Algorithm

뭐 말 그대로 각각의 프로세스마다 우선 순위를 부여해서 우선 순위가 높은 프로세스를 먼저 실행시키는 알고리즘이다.

우선순위 10 프로세스와 1 프로세스가 동시에 실행중이라고 가정해 보자.
10 짜리가 더 높으니 거의 모든 CPU 타임을 10 프로세스가 차지하고 있을 것이다.

그럼 1 짜리 프로세스는 언제 실행되는가?
10 짜리 프로세스가 I/O Busy나 다른 프로세스를 기다리는 등의 블로킹 상태가 되어야만 한다.

2. Round-Robin Scheduling Algorithm

우선 순위 스케쥴링 방식의 예외를 처리하기 위해 고안된 알고리즘.
우선 순위가 같은 프로세스간에는 어떻게 해서 CPU를 분배하는가에 대한 스케쥴링 방식이다.

즉, 같은 우선 순위의 프로세스들간 형평성 유지를 위해 정해진 시간 간격 만큼만 실행을 하고 우선 순위가 동일한 다른 프로세스에게 CPU의 할당을 넘기는 방식을 뜻한다.

실행의 최소 단위 시간 간격을 우리는 Quantum 또는 Time Slice 라 하는데, 동일한 우선 순위의 모든 프로세스들은 이 타임 슬라이스를 기준으로 CPU의 할당을 넘기게 된다.

타임 슬라이스 간격이 관건인데...

1) 너무 길면 인터랙티브한 시스템에서 문제가 될 수 있다. 입력에 대한 반응이 늦는 등...
2) 너무 짧으면 컨텍스트 스위칭이 너무 많이 발생해서 성능 저하 문제가 심각해 진다.

최근 OS들은 보통 15~20ms 간격으로 스케쥴링을 수행한다고 한다.
Windows7의 경우 약 15ms 단위 (정확하게 15.6001ms)로 스케쥴링한다.

따라서, 우리가 만든 쓰레드가 임의로(::Sleep 등) 쓰레드 컨텍스트 스위칭을 시키지 않았다 하더라도,
항상 수행되고 있다고 가정해서는 안 된다는 것을 반드시 기억해야 한다.

특정 쓰레드가 모든 프로세서를 점유하고 있다면 다른 쓰레드가 어떻게 수행될 수 있겠는가?

Window 운영체제의 경우 GetSystemTimeAdjustment 함수를 활용하면 정확한 타임 슬라이스 값을 확인할 수 있다.

  1. DWORD timeAdjustment = 0;
  2. DWORD timeIncrement = 0;
  3. BOOL timeAdjustmentDisabled = FALSE;
  4.  
  5. GetSystemTimeAdjustment(&timeAdjustment, &timeIncrement, &timeAdjustmentDisabled);


정리를 하면,
Windows OS에서는 (Linux도 MAX OS X도...거의 모든 OS에서)

1) 우선 순위 스케쥴링과 2) 라운드-로빈 스케쥴링 알고리즘을 혼합한 선점형 스케쥴링을 수행한다.

윈도우 OS에서는 프로세스들의 Priority와 I/O Busy state 등을 토대로 아래 그림과 같이 스케쥴링한다.



4. 프로세스 스케쥴링 발생 시점

이 발생 시점에 대해서는 특별하게 따로 외우거나 할 필요가 있다기 보다, 스케쥴링 방식을 이해하고 있으면 자연스레 습득할 수 있다.

1) 라운드-로빈 방식을 위한 Every Time Slice 

동일 우선 순위의 다른 프로세스에게 CPU를 넘겨줘야 하는지 판단하기 위해 매 타임 슬라이스마다 스케쥴러가 동작해야 한다.

2) 우선 순위 방식을 위한 프로세스 생성과 소멸

우선 순위가 가장 높은 프로세서가 CPU를 차지해야 하므로, 현재 실행 중인 프로세스보다 더 높은 프로세스가 새로 생성되었는지, 더 높았던 프로세스가 종료되었는지를 알기 위해서는 프로세스가 생성되고 소멸될 때마다 스케쥴러가 동작해야 한다.

3) 실행 중인 프로세스 블로킹

현재 실행 중인 프로세스가 블로킹 상태가 되면, 다른 프로세스가 대신 실행된다. 따라서, 현재 실행 중인 프로세스가 블로킹 상태에 놓이면 다음 실행될 프로세스 선정을 위해서 스케쥴러가 동작해야 한다.


5. Context switching

CPU가 멀티 프로세스를 수행함에 있어 위 그림과 같이 프로세스 스케쥴링이 발생한다.
이로 인해 프로세스의 잦은 교체가 발생할 수 있다.

현재 실행중인 프로세스가 바뀌는 것은 Context switching이라고 하며, 같은 절차가 필요하다.

1) A 프로세스의 데이터로 채워져 있던 레지스터들의 내용을 B 프로세스의 내용들로 교체.
2) A 프로세스의 데이터들은 컨텍스트 메모리에 백업.


'프로그래밍 > 프로그래밍 공부' 카테고리의 다른 글

CPU  (0) 2016.02.15
스레드(Thread)의 기본적인 특성  (0) 2016.02.15
프로세스(Process) , 스케쥴링(Scheduling)  (0) 2016.02.15
스트림(Stream)이란  (0) 2016.02.05
압축  (0) 2016.01.28
statement란?  (1) 2016.01.27
Posted by GENESIS8

댓글을 달아 주세요