SMALL

분류 전체보기 103

8-2. 핸들 테이블과 오브젝트 핸들의 상속

핸들테이블의 이해 - 핸들 테이블은 프로세스마다 독립적 핸들테이블의 상속 - CreateProcess 함수에서 5번째 인자 값으로 bInheritHandles라는 BOOL 값에 따라 핸들테이블 상속이 가능 - 핸들 테이블의 데이터 마다 상속 여부가 있으며, Y가 되어 있는 핸들 데이터만 상속이 가능 ex) 핸들 테이블 예시 핸들 주소 상속여부 127 0x1200 Y 168 0x1680 N 256 0x2400 Y ..... SECURITY_ARRTIVUTES sa; sa.nLength = sizeof(sa); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; // 핸들 상속 여부 ..... CreateMailSlot(....&sa); // &sa는 4번..

8-1. 프로세스 환경변수

프로세스 환경변수의 구성 환경변수 데이터를 저장하는 함수 : SetEnvironmentVariable("Key", "Value"); 환경변수 데이터를 가져오는 함수 : GetEnvironmentVariable("Key", 반환할 포인터 변수,); * 환경변수 테이블은 자식 프로세스에게 복사하여 보낼 수 있음 ex) EnvParent.cpp #include #include #include int _tmain(int argc, TCHAR* argv[]) { SetEnvironmentVariable(_T("Good"), _T("morning")); SetEnvironmentVariable(_T("Hey"), _T("Ho!")); SetEnvironmentVariable(_T("Big"), _T("Boy"));..

7-2. Signaled & Non-Signaled

커널 오브젝트의 상태 - 상태: 리소스의 현재 상황을 알리기 위함 - 만약 자식 프로세스를 생성했다면 자식 프로세스의 커널 오브젝트의 상태 정보는 Non-Signaled로 초기화되며 실행중을 의미함 - 실행이 종료되면 프로세스 커널 오브젝트는 Signaled 상태가 됨 - 커널 오브젝트 상태를 통해서 핸들을 가진 프로세스가 그 상태를 알 수 있음 상태관찰 시나리오 - 자식 프로세스의 커널오브젝 핸들의 값이 7이라면 - 부모 프로세스는 자식 프로세스의 상태를 알기 위한 함수(WaitForSingleObject())에 매개변수로 핸들 값 7을 대입하면 자식 프로세스의 상태를 알 수 있음 - 자식 프로세스가 Signaled 상태(종료된 상태)에는 WaitForSingleObject의 함수가 바로 반환되지만, ..

7-1. 프로세스간 통신(IPC)

* 하나의 프로세스가 하나의 프로그램이라는 생각을 할 수 있는데, 하나의 프로그램이 여러 프로세스로 형성될 수 있다. 이는 여러 프로세스 간의 통신이 이뤄져야 함을 뜻한다. IPC * 프로세스간 통신 - 프로세스간 데이터 송/수신 → 메모리 공유 - 데이터를 주고 받는 행위는 공유되어지는 메모리 공간을 생성하는 것과 같음 ex) 프로세스 A, B의 메모리 영역은 완전히 분리되어 있음 프로세스 A 영역 프로세스 B 영역 Data 영역 Data 영역 Heap 영역 Heap 영역 Stack 영역 Stack 영역 - OS는 안정성의 이유로 프로세스간의 메모리 영역에 접근하는 것을 막고 있기에 분리되었다고 볼 수 있음 - 이에 대한 해결책으로써 IPC를 제공함 메일슬롯 * 동작 원리 - 메일 슬롯은 우체통의 원리..

6-2. 커널 오브젝트와 핸들의 종속관계

- 프로세스 A와 A가 생성한 프로세스 B가 있다면 커널 오브젝트도 각각 1개씩 연결되어 있다. 프로세스A는 핸들 인덱스 값으로 커널 오브젝트에 접근하게 되는데, 프로세스 A가 프로세스 B의 핸들도 접근할 수 있다. 만약 프로세스 B가 소멸되지만 프로세스 A가 여전히 프로세스 B의 핸들을 통해 커널 오브젝트에 접근이 가능하기에 운영체제 영역에서 프로세스 B의 커널 오브젝트를 소멸시키지 않고 유지하게 된다. 즉, 운영체제는 커널 오브젝트에 하나라도 접근하는 프로세스가 있다면 커널 오브젝트를 유지시킨다. Q. 메인 함수에서 리턴 값은 어떤 의미가 있는가? A. 부모 프로세스는 자식 프로세서의 실행 상태를 알아야 하기에 정상적 종료를 했는지에 대한 값을 알아야 하기에 리턴 값은 프로세스의 커널 오브젝트에 종료..

6-1. 커널 오브젝트에 대한 이해

커널 오브젝트 * 커널 오브젝트(Kernel Object) - 커널(kernel)에 의해 관리되는 리소스 정보를 담고 있는 데이터 블록 - OS(운영체제)의 핵심 or 알맹이는 커널에 해당됨 - 리소스는 OS에 의해 생성/소멸되는 데이터를 말함 Kernel Object Resource 파이프 커널 오브젝트 ←─→ 파이프 프로세스 커널 오브젝트 ←─→ 프로세스 쓰레드 커널 오브젝트 ←─→ 쓰레드 - 예를 들어 파일에 대한 접근 정보는 OS가 가지고 있어서 사용자가 파일 접근에 대해 관리하게 됨 - 파일을 생성하거나 오픈하게 되면 이에 대한 커널 오브젝트가 생성이 됨(커널 오브젝트 없이 관리되지 않음) - 프로세스 커널 오브젝트에 프로세스에 대한 상태, 우선순위 등에 대한 정보를 담고 있음 - 따라서 커널 ..

5-2. 프로그래밍을 통한 프로세스의 생성

프로세스 생성 함수 Bool CreateProcess( LPCTSTR lpApllicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ); - LPSTARTUPINFO, LPPROCESS_INFORMATION 는 사용자가 구조체를 생성하여 인자로 전달해..

5-1. 프로세스의 생성과 소멸

프로세스의 이해 * 프로세스란? - 메인 메모리로 이동하여 실행 중인 프로그램? → 일반적인 정의 프로세스 구체적인 이해 * 프로세스의 범위 - 메모리 구조 + 레지스터 Set - 프로세스 별 독립적인 대상은 프로세스의 범주에 포함시킬 수 있음 Code 영역 명령어 (Instruction Code) Data 영역 전역변수 Static 변수 Heap 영역 프로그래머 할당 Stack 영역 지역변수 전달인자 정보 cf) Context Switching : A프로세스와 B프로세서가 함께 실행되어 질 때, 레지스터 정보(레지스터 Set)는 프로세스에 따라서 저장&불러오기를 하여 레지스터를 사용함. 이는 1초에 수십번 이뤄져 프로세스가 동시 진행되도록 함. 프로세스마다 레지스터 Set이 할당되어 레지스터를 사용. ..

4-3. Direct Addressing Mode & Indirect Addressing Mode

Direct Addressing Mode의 문제점 * 명령어 구성의 또 다른 문제점 - 명령어의 구조상 한정적인 주소값을 저장할 수 있는데, 따라서 메모리 주소가 0x0100라면 구성이 불가하게 됨 Direct Addressing Mode & Indirect Addressing Mode 메모리의 주소값을 직접 지정하여 가져오는 것에 대한 여부에 따라 나뉘어진다. - 메모리에 데이터가 있고 주소로 직접 가져오는 것이면 Direct 모드 - 메모리에 값이 아닌 다른 참조 값이 있어서 참조 값의 주소를 통해 데이터를 가져오는 것이면 Indirect 모드 문제해결 - ARM이나 임베디드에 사용되는 CPU의 문제해결법 MUL r0, 4, 4 // 16 MUL r2, 4, 4 // 16 MUL r3, r0, r2 ..

카테고리 없음 2022.05.12
LIST