Computer Security

#32 CPU 구조 본문

리눅스 시스템 프로그래밍

#32 CPU 구조

쿠리 Kuri 2022. 10. 7. 18:30
반응형

Multi-Processor

 

멀티 프로세서는 둘 이상의 중앙 처리 장치 (CPU)가있는 컴퓨터 시스템으로, 각각은 주변 장치뿐만 아니라 공통 기본 메모리를 공유한다.  이것은 프로그램의 동시 처리에 도움이된다.

 

멀티 프로세서를 사용하는 주요 목표는 시스템의 실행 속도를 높이고 다른 목표는 내결함성 및 응용 프로그램 일치이다.

다중 프로세서의 좋은 예는 두 개의 컴퓨터 시스템에 연결된 단일 중앙 타워다.

멀티 프로세서는 컴퓨팅 속도, 성능 및 비용 효율성을 향상시키고 가용성과 안정성을 향상시키는 수단이다.

 

멀티 프로세싱에서 모든 CPU는 동일한 기능을 갖거나 일부 기능은 특정 기능을 위해 예약 될 수 있다.

 

 

 


멀티 프로세서를 사용하는 방법

 

  • 단일 명령어, 단일 데이터 (SISD)와 같은 단일 프로세서
  • 다중 명령, 다중 데이터 (MIMD)와 같은 다중 관점에서 다중 개별 명령 시리즈를 실행하기위한 단일 시스템 내부
  • 일반적으로 벡터 처리에 사용되는 단일 명령 다중 데이터 (SIMD)와 같은 다양한 관점에서 단일 일련의 명령
  • 다중 안전 명령 단일 데이터 (MISD)와 같은 단일 관점에서 다중 시리즈 명령은 페일 세이프 시스템의 중복 및 하이퍼 스레딩 또는 파이프 라인 프로세서를 설명하는 데 사용된다.

 

 

 

 


멀티 프로세서를 사용하면 장점

  • 성능 향상
  • 여러 응용
  • 여러 사용자
  • 응용 프로그램 내부의 멀티 태스킹
  • 높은 처리량 및 / 또는 응답 성
  • CPU 간 하드웨어 공유

 

 

 

 


Multi-core

 

두 개 이상의 독립 코어를 단일 집적 회로로 이루어진 하나의 패키지로 통합한 것이다. 

칩 레벨 멀티프로세서(CMP)라고도 한다.

 

듀얼 코어(dual-core) 프로세서는 두 개의 코어를 포함하고 있으며, 트리플 코어(triple-core) 프로세서는 세 개의 코어를 포함하고 있고, 쿼드 코어(quad-core)는 네 개의 코어를 포함하고 있고, 헥사 코어(hexa-core) 프로세서는 여섯 개의 코어를 포함하고 있다. 옥타 코어(octa-core) 프로세서는 여덟 개의 코어를 포함하고 있다. 

 

데카코어(deca-core) 프로세서는 열 개의 코어를 포함하고 있다. 도데카 코어(dodeca-core) 프로세서는 열두 개의 코어를 포함하고 있다.

  •  

 

 

 

 

 


Multi-thread

 

  • 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고
    자원의 생성과 관리의 중복성을 최소화하여
    수행 능력을 향상시키는 것을 멀티쓰레딩이라고 한다.
  • 하나의 프로그램에 동시에 여러개의 일을 수행할수 있도록 해주는 것이다.

 

 

 

 


장점

  • 프로세스를 이용하여 동시에 처리하던 일을 쓰레드로 구현할 경우
    메모리 공간과 시스템 자원 소모가 줄어들게 된다.
  • 쓰레드 간의 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아니라
    전역 변수의 공간 또는 동적으로 할당된 공간인 힙(Heap) 영역을 이용하여 데이터를 주고받을 수 있다.
  • 그렇기 때문에 프로세스 간 통신 방법에 비해
    쓰레드 간의 통신 방법이 훨씬 간단하다.
  • 심지어 쓰레드의 문맥 교환은 프로세스 문맥 교환과는 달리
    캐시 메모리를 비울 필요가 없기 때문에 더 빠르다.
  • 따라서 시스템의 처리량이 향상되고
    자원 소모가 줄어들어 자연스럽게 프로그램의 응답 시간이 단축된다.
  • 이러한 장점 때문에 여러 프로세스로 할 수 있는 작업들을
    하나의 프로세스에서 여러 쓰레드로 나눠 수행하는 것이다.

 

 

 


멀티 프로세스와 멀티 쓰레드의 차이점

  • 멀티 프로세스 : [데이터 영역, 힙, 스택 ]영역 모두를 비공유
  • 멀티 쓰레드 : [ 데이터 영역, 힙, 스택 ]영역중 스택 영역만 비공유

 

 

 

 

 


멀티 쓰레딩의 장점

  • 프로세스 생성은 많은 시간과 자원을 소비한다.
  • 이러한 단점을 최소화 시킨 일종의 경량화된 프로세스 = 쓰레드를 만들게 된 것이다.
  • 멀티 쓰레드에서 쓰레드간 스택 영역만 비공유하고
    데이터 영역과 힙 영역을 공유한다.
  • 쓰레드의 생성 및 컨텍스트 스위칭은
    프로세스의 생성 및 컨텍스트 스위칭보다 빠르다.
  • 멀티 쓰레드 컨텍스트 스위칭 시 데이터 영역과 힙을 뮤올리고 내릴 필요가 없다.
  • 데이터 영역과 힙 영역을 통해 데이터 교환이 가능하다.
  • 쓰레드 사이에서의 데이터 교환에서는 특별한 기법이 필요없다.

 

 

 

 

 


프로세서 친화(Processor affinity)

 

특정 프로세스를 어떤 CPU에 동작을 시키도록 하는 affinity를 지정하고 현재 설정을 가져오는 API

int sched_setaffinity(pid_t pid, size_t cpusetsize, const cpu_set_t *mask);
특정 프로세스를 CPU mask에 해당하는 CPU들 중 적합한 하나의 CPU를 골라 동작을 시키도록 설정하는 API
int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
해당 프로세스가 어디에서 동작할 수 있는지 읽어올 수 있는 API

파라미터

 

- pid : 대상 프로세스의 pid

- cpusetsize : mask의 사이즈(sizeof(cpu_st_t))

- mask : CPU mask

 

 

 

 

반환 값

 

- 성공 시 0

- 실패 시 -1

 

 

 

 

 


현재 동작하고있는 CPU 번호를 리턴해주는 API

int sched_getcpu(void);

반환 값

 

- 성공 시 CPU 번호(non-negative)

- 실패 시 -1

반응형
Comments