본문 바로가기

반응형

전체 글

(186)
Windows API Linux는 커널 소스가 공개되어 있어, 굳이 언어적으로 건들이지 않아도 사용자가 자유롭게 건드릴 수 있다. 하지만 Windows는 그렇지 못하기 때문에 어떻게 어떤 방법으로 Kernel에 접근해야할지 몰라 고민하다 Windows API라는 것을 알게 됐다. API(Application Programming Interface) 라이브러리와 비슷하게 사용되지만, 개념은 전혀 다르다. 집합으로 보자면, API는 Library에 속한다. API는 라이브러리를 이용해서 어떤 규칙을 만들고, 그것을 개발자에게 제공한다. OS와 사용자 사이에 의사소통을 위해 Shell이 존재한다면, OS와 응용 프로그램 사이 통신에는 API가 존재한다. Windows API Windows API는 Microsoft의 Windows..
시스템 콜(System Call)과 Windows 커널 모드(User Mode, Kernel Mode) Windosw OS를 실행하는 컴퓨터 프로세서에는 User Mode와 Kernel Mode 두가지 모드가 존재한다. 컴퓨터 프로세서는 여러 개의 모드를 가짐으로써 전체 시스템을 보호한다. 프로세서는 프로세스가 실행 중인 코드 유형에 따라 두 모드를 전환한다. 프로세스는 User Mode 영역과 Kernel Mode를 오가면서 실행된다. 이 때, OS 운영체제의 핵심 요소인 커널의 기능들은 오직 Kernel Mode에서만 수행할 수 있다. 왜 이렇게 번거롭게 만든 것일까? 커널 모드에서 어플리케이션이 잘못된 동작을 수행할 경우 전체 시스템에 영향을 줄 수 있기 때문에 모드에 따른 프로세서의 서비스 접근을 제한하여, 시스템 전체의 신뢰성을 보장한다. 만약 User Mode에서 System Call을 사용할 ..
커널 오브젝트(Kernel Object) 위 그림은 Windows에서 운영되고 있는 프로세스 및 커널의 일반적인 모습입니다. 검은 점선의 윗 부분을 보통 User 모드라고 하고, 검은 점선의 아래 부분을 Kernel 모드라고 합니다. 커널 오브젝트(Kernel Object)를 알기에 앞서 일반적으로 윈도우 어플리케이션 개발자는 윈도우가 제공한 API로 커널 오브젝르르 생성 및 조작해서 어플리케이션을 구현합니다. 그렇기 때문에 Windows로 개발을 하는 사람은 커널 오브젝트에 대한 기본적인 이해가 필요합니다. '커널 오브젝트'를 이해하기 위해서는 우선 커널이 무엇인지 알아야 한다. 커널이란? 컴퓨터 과학에서 커널은 컴퓨터의 운영 체제의 핵심이 되는 컴퓨터 프로그램의 하나로, 시스템의 모든 것을 완전히 통제한다. 운영 체제의 다른 부분 및 응용 ..
커널(Kernel) 커널 커널은 컴퓨터 운영 체제의 핵심이 되는 컴퓨터 프로그램으로, 시스템의 모든 것을 완전히 제어한다. 운영체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 가지 서비스를 제공한다. 핵심이라고도 한다. 커널의 역할 커널은 운영 체제의 핵심 부분이므로, 커널의 역할 역시 운영 체제의 핵심 역할이라 할 수 있다. 보안 커널은 컴퓨터 하드웨어와 프로세스의 보안을 책임진다. 자원 관리 한정된 시스템 자원을 효율적으로 관리하여 프로그램의 실행을 원활하게 한다. 특히 프로세스에 처리기를 할당하는 것을 스케줄링이라 한다. 추상화 같은 종류의 부품에 대해 다양한 하드웨어를 설계할 수 있기 때문에 하드웨어에 직접 접근하는 것은 문제를 매우 복잡하게 만들 수 있다. 일반적으로 커널은 운영 체제의 복잡한 내부를 감추고..
리플렉션 Reflection (2) : 복잡한 if 문 대신 리플렉션으로 생성 함수 호출하기 프로젝트를 진행하면서 아래 예제 코드와 같이 형타입에 따라 다른 객체를 생성해야 하는 경우가 있습니다. if( data is DataTypeA a) { var model = new DataModelA(a); list.Add(model); } else if( data is DataTypeB b) { var model = new DataModelB(b); list.Add(model); } // 엄청 긴 if 문~ 위 예제 코드와 같은 구조로 개발을 하게 되면 데이터 타입이 추가될 때마다, if 문은 계속 길어질 수 밖에 없고 데이터 타입에 따라 DataModel을 생성하는 논리가 달라지면서 if문 내부도 복잡해져갔습니다. 이러한 구조로 인해 점점 코드는 더러워집니다. 이를 해결하기 위해 아래와 같이 리플렉션..
IPC(Inter-Process Commnication) IPC Process는 완전히 독립된 실행객체이다. 서로 독립되어 있다는 것은 다른 프로세스의 영향을 받지 않는다는 장점이 있다. 그러나 독립되어 있으니만큼 별도의 설비가 없이는 서로간에 통신이 어렵다는 문제가 있다. 이를 위해서 커널영역에서 IPC라는 내부 프로세스간 통신(Inter Process Communication)을 제공한다. 프로세스는 커널이 제공하는 IPC 설비를 이용해서 프로세스간 통신을 할 수 있다. 바로 프로세스들 간의 의사소통을 하는 것이라는 뜻인데, 프로세스가 통신 가능하다는 것은 서로 다른 프로세스가 데이터를 주고 받을 수 있다는 것이며, 동시에 접근 가능한 메모리 즉, 프로세스들이 공유하는 메모리가 필요하다는 뜻입니다. IPC는 그러므로 컴퓨터 내부에서 보다 더 효율적으로 정보..
윈도우 메세지 종류들 List Of Windows Messages | WndProc Hex 값 Intager 값 Symbol 이름 0000 0 WM_NULL 0001 1 WM_CREATE 0002 2 WM_DESTROY 0003 3 WM_MOVE 0005 5 WM_SIZE 0006 6 WM_ACTIVATE 0007 7 WM_SETFOCUS 0008 8 WM_KILLFOCUS 000a 10 WM_ENABLE 000b 11 WM_SETREDRAW 000c 12 WM_SETTEXT 000d 13 WM_GETTEXT 000e 14 WM_GETTEXTLENGTH 000f 15 WM_PAINT 0010 16 WM_CLOSE 0011 17 WM_QUERYENDSESSION 0012 18 WM_QUIT 0013 19 WM_QUERYOPEN 0014 20 WM_ERASEBKGND 0015 21 WM_S..
GDI 개체 관리 메모리 관련 작업할 때 봤던 것인데 정리해둔다. GDI 개체 종류 Bitmap 브러시 메타파일 메모리 DC 색상표 펜 및 확장 펜 [출처] https://learn.microsoft.com/ko-kr/windows/win32/sysinfo/gdi-objects

반응형