공부한 이야기/윈도우 OS

    VII : 프로세스간 통신 (IPC) 1

    VII : 프로세스간 통신 (IPC) 1 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) 프로세스간 통신 (IPC) 의 의미 만일 서로 통신하고자 하는 프로세스가 서로 만날 수 있는 여건, 즉 공유 메모리 등이 존재한다면 프로세스간 통신은 매우 쉬워진다. 하지만, 이러한 여건이 되지 않는다면 보조 수단이 필요하다. 프로세스들은 모두 가상 메모리 시스템 내에서 자신만의 메모리 주소 체계를 가지므로, 서로의 메모리에 쉽게 접근할 수 없다. 이는 프로세스간 메모리 침범을 막아 안정성을 높이기 위함이다. 메일슬롯 방식의 IPC 메일슬롯은 파이프와 더불어 대표적인 IPC 기법이다. 메일슬롯은 편지를 넣을 수 있는 가느다란 우체통의 입구를 의미한다. 즉, 메일슬롯의 기본 원리는 데이터를 주..

    VI : 커널 오브젝트와 오브젝트 핸들

    VI : 커널 오브젝트와 오브젝트 핸들 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) 커널 오브젝트에 대한 이해 커널이란 컴퓨터를 운영하는 데 있어서 중심이 되는 운영체제 핵심 부분을 뜻한다. 커널이라는 용어와 운영체제라는 용어는 같은 의미로 쓰이기도 한다. 커널 오브젝트는 커널 메모리 영역에서 관리되는 중요한 정보를 담아둔 데이터 블록을 의미한다. 운영체제가 프로세스를 관리하기 위해서는 프로세스에 관련된 몇몇 정보를 저장할 수 있어야 하고, 참조 및 변경도 가능해야 한다. 따라서 이러한 내부적인 구조체를 생성하고 관리에 필요한 데이터로 초기화하여 커널메모리에서 관리하는데, 이것이 커널 오브젝트이다. 프로세스가 생성될 때에만 커널 오브젝트가 생기는 것이 아닌, 스레드를 생성할 ..

    V : 프로세스의 생성과 소멸

    V : 프로세스의 생성과 소멸 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) 프로세스의 이해 오늘날의 운영체제는 멀티프로세스 운영체제로서, 프로세스가 여러개 존재할 수 있는 운영체제이다. 프로세스란 실행 중 상태에 있는 프로그램을 의미하며, 프로그램을 실행하는 순간 메모리의 할당이 이루어지고, 이 메모리 공간으로 프로그램의 바이너리 코드가 올라가게 된다. 이 순간 이 메모리와 프로그램의 인스턴스에 대한 정보를 가지는 집합을 프로세스라고 한다. 메모리 공간은 여러 영역으로 나뉠 수 있다. Data 영역 : 전역변수나 static 변수의 할당을 위해 존재하는 영역 Stack 영역 : 지역변수 할당이나 함수 간 호출에 따른 계층 및 파라미터 저장 영역 Heap 영역 : 동적 할당을 ..

    IV : 컴퓨터 구조에 대한 두번째 이야기

    IV : 컴퓨터 구조에 대한 두번째 이야기 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) 컴퓨터 구조의 접근방법 컴퓨터 구조에 대한 보다 근본적인 이해는 프로세스와 쓰레드를 공부하는 데 큰 도움이 된다. CPU의 특성을 알 필요가 있는 시스템 프로그래머 입장에서, CPU를 보는 관점 대부분은 레지스터에 집중된다. 레지스터를 디자인할 때 결정해야 할 중요 요소로는 다음과 같은 항목이 있다. 레지스터를 몇 비트로 구성할 것인가 레지스터를 몇 개 정도 준비할 것인가 레지스터 각각을 무슨 용도로 사용할 것인가 CPU 구성 형태에 따라서, 즉 레지스터 구성 형태에 따라서 명령어 구조가 달라진다. 만일 16비트짜리 레지스터가 있고, 명령어 길이를 만일 16비트로 일치시킨다고 하면, 명령어..

    III : 64비트 기반 프로그래밍

    III : 64비트 기반 프로그래밍 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) WIN32 vs WIN64 시스템이 어떤 비트 환경에서 동작하는지 구분하는 것은 두 가지로 판별할 수 있는데, 하나는 한 번에 전송 및 수신할 수 있는 데이터의 크기이고, 이는 즉 IO 버스의 대역폭을 의미한다. 또한, CPU가 데이터를 처리함에 있어 한 번에 처리 가능한 데이터의 크기가 비트 판별의 기준이 된다. 32비트 환경에서는 주소값의 표현을 가장 효율적인 32비트로 하였기에 최대 4GB의 메모리를 가질 수 있는 시스템이 되었고, 64비트 환경에서는 64비트로 메모리를 표현하기에 최대 16EB의 메모리를 가질 수 있는 시스템이다. 프로그램 구현 관점에서의 WIN32 vs WIN64 마이크로..

    II : 아스키코드 VS 유니코드

    II : 아스키코드 VS 유니코드 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) Windows에서의 유니코드 아스키코드는 미국에서 정의하고 있는 표준이다. 알파벳 26자에 몇몇 확장 문자를 포함해도 256개를 넘지 않기에, 1바이트로 표현이 되는 문자이다. 하지만 다른 국가의 문자는 그렇지 않기에, 유니코드를 사용하고, 이는 문자를 표현하는데 있어서 균일하게 2바이트를 사용한다. SBCS 는 Single Byte Character Set으로서, 문자를 표현하는데 1바이트만을 사용하는 방식이다. 아스키코드가 대표적으로 SBCS에 해당된다. MBCS는 Multi Byte Character Set으로서, 다양한 바이트 수를 사용하여 문자를 표현하는 방식이다. MBCS에서 영어는 1바..

    I : 컴퓨터 구조에 대한 첫번째 이야기

    I : 컴퓨터 구조에 대한 첫번째 이야기 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) 시스템 프로그래밍의 이해와 접근 시스템 프로그래밍이란, 하드웨어를 직접 제어하는 OS 등을 개발하는 사람도 포함하지만, 이 OS가 제공하는 API를 사용하여 프로그래밍 하는 것을 포함한다. 컴퓨터 구조와 운영체제를 이해하게 되면, 문법적 요소만을 이해하고 바로 프로그래밍하는 프로그래머들보다 효율적인, Power Programming 이 가능해진다. 램이라는 저장장치로 구성되는 메인메모리는 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역이다. 즉 프로그램 실행을 위해 존재하는 메모리이다. 입 출력 버스는 컴퓨터 구성요소 사이에 데이터를 주고 받기 위해 사용하는 경로이다. 이는 주고받는 ..

    프로세스 기초

    프로세스 기초 프로그램은 저장장치에 저장된 명령문의 집합체를 의미한다. 프로세스는 메모리에 적재되어 실행중인 프로그램을 의미하고, 다음 구조로 이루어진다. Code 영역 자신을 실행하는 코드가 저장되어 있다. Data 영역 전역 변수와 정적(static) 변수가 저장되어 있다. Heap 영역 프로그래머가 런타임 시 동적으로 메모리를 할당하는 데에 쓰인다. Stack 영역 지역 변수와, 함수 호출을 했을 때 필요한 정보들이 저장된다. 멀티프로그래밍 & 멀티프로세싱 유니프로그래밍 (Uniprogramming) 메모리에 오직 하나의 프로세스가 올라온 것을 의미한다. 멀티프로그래밍 (Multiprogramming) 메모리에 여러 개의 프로세스가 올라온 것을 의미한다. 멀티프로세싱 (Multiprocessing)..