본문 바로가기

CS

(19)
컴퓨터의 시간측정 개요코드의 성능 측정을 위해 시작 끝 지점의 시간을 구해서 사용하거나, n초 후에 어떤 로직을 실행해야 하는 등 코드를 만들 때 시간을 측정해야 하는 경우가 있다. 이 때 시간을 어떻게 받아오는 지에 대해 생각해보자.시간을 구하는 법소프트웨어는 하드웨어 없이 단독으로 시간을 알 수 없다.CPU가 명령어를 실행하는 흐름만 있을 뿐 n초가 지났는지 알 수 있는 방법은 없다.따라서 소프트웨어는 하드웨어를 통해서 시간을 받아와야 한다. 하드웨어의 시간 계산PIT->HPET->LAPIC 순으로 발전하면서 https://en.wikipedia.org/wiki/Programmable_interval_timer Programmable interval timer - WikipediaFrom Wikipedia, the f..
컴퓨터의 CPU (2) - 레지스터 https://basaeng.tistory.com/7 컴퓨터의 CPU (1)메인 메모리를 알아봤으니 다음은 CPU이다.구매한 CPU는 가장 보급, 엔트리 급으로 많이 팔리는 라이젠 7500f이다. 개요CPU는 명령어 처리를 위해 메모리에 저장된 명령어를 읽고(Fetch) 해석하고(Decobasaeng.tistory.com 이전에는 CPU의 코어에 대해 알아봤으니 이번에는 레지스터에 대해 알아보겠다. 개요레지스터는 CPU의 설계에 의존한다.CPU 제조 시에 몇 개를 만들고 어떻게 사용할지 고정된 자원인 것이다.내가 사용하는 라이젠 7500f의 경우 x86-64 아키텍처로 32비트 기반인 x86의 구조를 유지하며 64비트 기능을 추가한 것이다.x64는 기능이 많아 비교적 분석할만한 x86을 중점적으로 보겠다..
switch case 그리고 점프 테이블 개요조건을 비교하는 경우 조건문 if - else if - else 문 (if문)과, switch case문(switch 문)을 사용한다.switch case는 나눠서 작성하기 어려워 조건이 많은 경우 코드가 길어지는 단점이 있지만,if문과 다르게 switch문은 성능 최적화의 여지가 있다. switch문의 최적화switch문은 if문과 다르게 조건이 일정한 범위의 값일 경우 switch문을 jump table 방식으로 구성한다.(컴파일러가 생성함) 위와 같이 연속적인 값의 경우 일반적인 조건문의 어셈블리와는 다른 어셈블리가 구성된다.mov eax,dword ptr [a] -> a(조건에 사용되는 값)을 eax에 넣는다.mov dword ptr [ebp-0Ch],eax c..
컴퓨터의 프로세스 개요보통 실행되고 있는 프로그램을 프로세스라고 부른다.프로세스는 메모리 영역으로 스택, 데이터 영역, 힙 영역 + 코드 영역을 가진다.  Process(Task)의 State new(created): 생성 중인 프로세스running: 실행 중인 프로세스waiting(blocked): io, event로 인해 대기 중인 프로세스ready: 자원 할당을 기다리는 프로세스terminated: 실행 종료된 프로세스 PCB (Process Control Block)PCB의 프로세스 정보를 통해서 OS가 프로세스를 관리한다.아래와 같은 정보들을 포함한다.PIDProcess StatePC(Process Counter)CPU Registers스케줄링 정보: Priority 등메모리 관리 정보: Page Table, S..
Compare And Swap(CAS) 아주 간단하게 훑기 https://en.wikipedia.org/wiki/Compare-and-swap Compare-and-swap - WikipediaFrom Wikipedia, the free encyclopedia CPU instruction to alter a value in memory only if it equals a given value In computer science, compare-and-swap (CAS) is an atomic instruction used in multithreading to achieve synchronization. It compares the contenten.wikipedia.org Compare And Swap은 멀티스레딩 환경에서 동기화를 위해서 사용되는 원자적 연산이..
스레드 경합 해결하기(lock) -1 https://basaeng.tistory.com/12 멀티스레드 프로그래밍 시작하기개요현재 CPU 코어의 성능이 좋아졌지만 CPU의 성능을 온전히 사용하기 위해서는 멀티 태스킹, 멀티 스레딩 등 프로그램의 최적화가 필요합니다.  특히 많은 연산이 필요한 서버 등의 경우 이러basaeng.tistory.com 이전 포스트에서 언급한 것 처럼 스레드 사이에서 경합 상황이 생길 수 있기 때문에 해결하는 방법들이 필요하다.따라서 경합상황이 생길 수 있는 코드에 진입하기 전에 lock을 획득하고, 빠져나갈 때 lock을 반납해 경합을 막는다. 락을 획득하는 방법락을 획득하는 방법에 따라 프로그램이 달라진다.현재 진행중인 스레드가 락을 획득하려고 시도하는데, 이미 다른 스레드가 락을 가지고 있다면 어떻게 할까?이..
멀티스레드 프로그래밍 시작하기 개요현재 CPU 코어의 성능이 좋아졌지만 CPU의 성능을 온전히 사용하기 위해서는 멀티 태스킹, 멀티 스레딩 등 프로그램의 최적화가 필요합니다.  특히 많은 연산이 필요한 서버 등의 경우 이러한 최적화가 중요합니다. 멀티프로세싱과 멀티태스킹을 헷갈리는 경우가 있는데 병렬적으로 여러 프로세서를 사용하는 것을 멀티프로세싱이라고 하고, 코어에서 여러 프로세스를 컨텍스트 스위칭을 통해 시분할로 처리하는 것을 멀티태스킹이라고 합니다.   멀티스레딩멀티프로세싱은 프로세스를 전환하며 처리하는 것이지만, 멀티스레딩은 프로세스 안에 나눠진 스레드를 전환하며 처리하는 것입니다. 스레드는 하나의 작업 흐름으로 프로세스에서 뻗어진 갈래입니다.스레드는 프로세스의 힙, 데이터 영역을 공유하기 때문에 (스택은 공유되지 않음) 컨텍..
컴퓨터의 CPU (1) 메인 메모리를 알아봤으니 다음은 CPU이다.구매한 CPU는 가장 보급, 엔트리 급으로 많이 팔리는 라이젠 7500f이다. 개요CPU는 명령어 처리를 위해 메모리에 저장된 명령어를 읽고(Fetch) 해석하고(Decode) 실행한다(Execute) + (Write-back)이를 명령어 사이클이라고 부른다. 이 명령어 사이클은 클럭 신호에 동기화되어 동작하며 라이젠 7500f는 CPU는 3.7Ghz의 클럭, 최대 5.0Ghz 클럭을 가진다. CPU에는 부품들이 많은데 ALU(연산장치), 제어 장치, 레지스터, 캐시 메모리 등이 있다.이 대부분의 부품들은 CPU 코어에 존재한다. 코어는 독립적으로 명령을 처리하며 대부분의 CPU는 여러 개의 코어를 포함해 병렬 처리를 한다.이를 통해 동시에 많은 작업을 처리할 ..