목록컴퓨터공학 (8)
멈추지 않고 끈질기게
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. 이번 포스팅에서는 프로세스의 스택 메모리 영역에 대해 알아보겠습니다. 1. 스택 메모리 프로그램이 메모리에 적재되어 프로세스로 실행될 때, 프로세스가 차지하는 메모리 영역은 다음과 같이 구분됩니다. 정적 메모리 영역(컴파일 시점에 크기가 결정) - 코드 영역: 프로그램의 코드(명령어)가 저장되는 영역 - 데이터 영역: 초기화까지 되어있는 전역 변수가 저장되는 영역 - BSS 영역: 초기화 없이 선언만 된 전역 변수가 저장되는 영역 동적 메모리 영역(런타임 중에 메모리 할당) - 힙(Heap) 영역: C++의 malloc, C#의 new 등으로 직접 할당하는 영역 - 스택(Stack) 영역: 지역 변수 등 스택 ..
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. 이번 포스팅에서는 레지스터에 값을 저장하는 방식인 엔디안에 대해 알아보겠습니다. 서론 컴퓨터는 데이터를 1바이트 단위로 저장하지만, 실제로 코딩할때 쓰는 데이터들은 1바이트보다 큰 타입이 대부분입니다( 가장 흔하게 쓰는 int형만 해도 4바이트입니다). 따라서 데이터를 저장할 때 여러개의 1바이트로 저장하게 되는데, 이 순서에 따라 빅 엔디안(Big Endian)이나 리틀 엔디안(Little Endian)으로 구분합니다. 이러한 바이트를 저장하는 순서를 바이트 오더(Byte Order)라고 하며, 어떤 바이트 오더를 사용하는지는 CPU(제조사)에 따라 다릅니다. 빅 엔디안(Big Endian) vs 리틀 엔디안..
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. 이번 포스팅에서는 공유 자원을 두고 발생하는 교착 상태에 대해 알아보겠습니다.교착 상태(Dead Lock) 지난 포스팅에서 임계 구역에 여러개의 스레드가 접근시 발생할 수 있는 문제와, 이를 막기 위한 뮤텍스 락과 세마포에 대해 알아보았습니다. 이런 수단들을 사용하면 스레드들을 상호 배제시킬수 있지만, 잘못하면 특정 공유자원을 할당받지 못해 계속 대기만 하는 상황이 발생할 수 있습니다. 이렇게 스레드(프로세스)들이 자원 할당을 기다리며 무기한 대기하는 상황을 교착 상태(Dead Lock)라고 합니다. 다음은 C#으로 작성한 교착 상태가 발생하는 예제 코드입니다.class Alpha{ static obj..
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. 이번 포스팅에서는 멀티 스레드 환경에서 스레드들을 동기화하는 방법에 대하여 알아보겠습니다. 1. 임계 구역(critical section)과 레이스 컨디션(race condition) 이전 포스팅에서 살펴본 공유 자원에 다수의 스레드가 접근 시 발생하는 문제를 다시 살펴보겠습니다. class Program { static int count = 0; static void Main(string[] args) { Thread t1 = new Thread(Plus); Thread t2 = new Thread(Minus); //스레드 시작 t1.Start(); t2.Start(); //스레드 종료까지 대기 t1.Join..
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. 이번 포스팅에서는 가상 메모리에 관하여 알아보겠습니다. 1. 가상 메모리의 정의 가상 메모리(virtual memory)란 프로세스에 실제 사용하는 물리적인 메모리가 아닌 추상화된 가상의 메모리를 할당하여 실제 메모리 크기보다 더 크게 사용할 수 있게 하는 기술입니다. 가상 메모리상에서의 주소를 가상 주소(virtual address) 또는 논리 주소(logic address)라고 하며, 이와 구분하기 위해 실제 물리 메모리의 주소는 물리 주소(physical address) 또는 실 주소 라고 합니다. 프로세스는 가상 주소를 할당 받아 실행되고, 가상 주소는 메모리 관리 장치(MMU / Memory Manag..
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. 이번 포스팅에서는 컴퓨터에서의 소수 표현에 대해서 간단하게 알아보겠습니다. 1. 서문 bool result = (0.11f * 3 == 0.33f); Console.WriteLine(result); 상기 코드는 C#에서 0.11f * 3 == 0.33f 의 결과를 출력하는 코드입니다. 상식적으로 0.11 x 3이면 0.33이니까 당연히 true일 것 같지만, 막상 실행해보면 좀 다릅니다. 보다시피 False를 출력하고 있습니다. 이런 현상이 발생하는 이유를 이해하려면 2진법과 소수점 자료형의 특징을 이해해야 합니다. 2. 컴퓨터의 소수 저장 방식 컴퓨터에서 소수를 저장할 때는 IEEE에서 제안한 부동소수점 방식..
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. 이번 포스팅에서는 멀티 프로세스(multi process)와 멀티 스레드(multi thread)의 차이에 대해서 알아보겠습니다. 1. 프로세스(Process)와 스레드(Thread) 실행되기 전의 프로그램은 보조기억장치에 저장되어 있으며, 메모리에 적재하여 실행되는 순간 이를 프로세스라 합니다. 일반적으로 '실행중인 프로그램'이라고 부르는 것이 프로세스에 해당합니다. 이 때 프로세스가 메모리에서 차지하는 공간을 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역의 4가지로 구분합니다. 코드 영역(code segment)은 프로그램의 명령어가 저장되는 공간으로, 읽기 전용 공간입니다. 데이터 영역(data s..
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. 이번 포스팅에서는 컴퓨터의 저장장치 중 하나인 캐시 메모리에 대해 알아보겠습니다. 1. 캐시 메모리의 특징 캐시 메모리는 CPU와 메모리 사이에 위치하는 저장장치로서, 주로 SRAM을 사용하여 CPU의 레지스터보다는 용량이 크고 메모리보다는 속도가 빠릅니다. 특히 속도면에 있어서 CPU와의 물리적인 거리도 메모리보다 가깝기 때문에, 캐시 메모리에서 데이터를 읽어들여 처리한다면 메모리까지 접근하는 것보다 훨씬 빠릅니다. 그래서 CPU는 메모리에서 데이터를 읽어들일 때 앞으로 필요할 것으로 예측되는 데이터를 함께 읽어들여 캐시 메모리에 저장해 둡니다. 이 후 데이터에 접근할 때 캐시 메모리에 존재하는지 확인하여, ..