Operating System (10) 썸네일형 리스트형 [Windows] 핸들 테이블 결론 : 커널 오브젝트는 핸들 테이블이란 자료구조를 생성해서 핸들을 관리한다. 핸들을 인자로 취하는 함수를 호출할 땐 Create류 함수를 호출하며, 핸들을 삭제할 경우 CloseHandle 함수를 이용한다. OS는 프로세스가 초기화되면 프로세스를 위해서 커널 오브젝트 핸들 테이블을 할당한다. 이러한 핸들 테이블은 유일하게 커널 오브젝트를 의해서만 사용된다. 그리고 이 핸들 테이블의 개발 방식이나, 관리 방법 등은 어떤 구체적인 문서화가 되어있지 않다. 간단하게 이런 식으로 있겠구나 하고 넘어가셔도 된다. 이 테이블은 아래와 같은 식으로 커널 오브젝트에 대한 포인터, 액세스 마스크, 플래스로 구성된다. 인덱스 커널 오브젝트의 메모리 블록을 가리키는 포인터 액세스 마스크(각 비트별 플래그 값을 가지는 DW.. [Windows] 커널 오브젝트란? 결론 : 커널 오브젝트는 커널에 의해 생성되는 간단한 메모리 블록 커널 오브젝트는 커널에 의해 생성되는 간단한 메모리 블록이다. 그리고 윈도우 운영체제에는 이러한 커널 오브젝트가 다양하게 존재한다. (ex. 이벤트 오브젝트, 파일 오브젝트, IOCP 오브젝트 등 - 그 외 타입은 WinObj이란 툴을 통해서 확인 가능하다.) 그리고 이러한 오브젝트들은 다양한 함수를 통해서 생성된다. 이 메모리 블록은 오직 커널에 의해서만 구조체로 접근이 가능하다. 그리고 이 구조체는 보안 디스크립터, 사용 카운트(Usage Count)를 가지고 있다. 하지만 그 외 값들은 오브젝트 타입마다 굉장히 다양하다. 예로 들어, 프로세스 오브젝트의 경우는 PCB가 가지고 있어야할 Process ID, 기본 우선 순위, 종료 코드.. [OS/Linux] 파일 디스크립터 OS에는 시스템 콜을 통해서 저 수준(Low-Level) 차원에서 파일 입출력을 지원을 할 수 있게 해준다. 즉 ANSI의 표준 함수가 아니라 OS차원에서 지원해주는 것이기 때문에 타 OS에 대한 호환성은 없다. 예로 들어 linux에서 제공하는 시스템 콜을 사용해서 개발을 한다면, windows에선 빌드가 되지 않을 가능성이 높다는 것이다. 리눅스는 네트워크에서 사용하는 소켓도 일종의 파일처럼 간주를 한다. 즉 소켓이 생성된 메모리 공간도 파일처럼 관리를 진행하는데, 리눅스에서는 프로그램이 파일을 사용할 때 파일 디스크립터라는 일종의 숫자를 이용해서 이를 관리한다. 대표적인 파일 디스크립터는 다음과 같다. 저 수준에서 입출력을 진행하려면 이 파일 디스크립터를 요구한다., 즉 저 수준 파일 입출력 함수는.. [OS/네트워크] 네트워크 프로그래밍 1. 네트워크 프로그래밍? 네트워크 프로그래밍은 네트워크를 통해서 연결된 둘 이상의 컴퓨터 사이에 데이터 송수신 프로그램 개발을 하는 것. 이때 소켓이라는 단위를 기반으로 프로그래밍 하는 것이기 때문에 소켓 프로그래밍이라고도 한다. 2. 소켓? 소켓은 네트워크에 연결하기 위한 연결 도구로써, OS가 제공하는 소프트웨어적인 디바이스라 보면 된다. 소켓을 이용하면 프로그래밍을 할 때 개발자가 데이터 송수신에 대해서 HW/SW적인 세세한 내용을 신경쓰지 않아도 된다는 장점이 있다. 소켓은 일종의 전화기로 비유가 가능하다. 먼저 프로그램은 socket 함수를 호출해서 이 소켓을 생성할 수 있다. 단 전화를 거는 용도와 받는 용도의 소켓 생성 방법은 다르다. 여기서 우리가 게임이나 그외 소프트웨어를 사용하다보면 .. [OS] CPU 스케쥴링 CPU 스케쥴링 멀티프로그래밍 상에서는 CPU는 순서에 대한 규칙을 가지는 것은 필수! 이러한 CPU의 이용률을 최대화하는 것이 목적! 메모리에 적재된 프로세스들 사이에서 프로세스를 선택하는 것 - 실행을 ready 단계에 있거나 CPU가 프로세스에 할당된 애들만! 다음 프로세스를 정하는 데 규칙을 어떻게 둘 것인가? - 프로세스들을 링크드리스트? 이진 트리 방식으로 순서를 처리할까? - FIFO(First In First Out) : 먼저 온 프로세스가 먼저 나간다. - 우선순위 큐 : 규칙?! 프로세스의 우선순위를 두는데 필요한 규칙을 정해줘야 한다. 선점 VS 비선점 방식 비선점 방식 스케쥴링 CPU가 대기 상태나 종료상태가 되기 전까지 실행중인 프로세스를 계속 유지하는 방식 선점 방식 스케쥴링 스.. [C#, OS] Monitor C#에는 다양한 Race condition을 막기 위한 도구들이 존재한다. 예로 들면 메모리 배리어나 Interlocked가 있다. 하지만 메모리 배리어는 데드락을 막을 수 없으며, Interlocked는 정수 타입만 막아줄 수 있다는 점이다. 그리고 코드는 점점 길어지면 이런 코드들에 임계 지역을 설정해주기 힘들어진다. 그렇기 때문에 나온 물건이 바로 Monitor이다. 사용법은 다음과 같다. 먼저 오브젝트를 하나 생성한다. object _obj = new object(); 그 다음에 atomic(원자성)을 요구하는 코드 블럭이 있다면 다음과 같이 코드를 작성한다. Monitor.Enter(_obj); // 임계지역 시작 ... 코드 블럭 ... Monitor.Exit(_obj); // 임계지역 끝 이.. [OS] 쓰레드 쓰레드 프로세스는 하나의 제어를 위한 쓰레드로 돌아가는 실행중인 프로그램 하지만 현대의 OS같은 경우에는 제어를 위해서 n개의 쓰레드로 돌아간다. 그럼 쓰레드가 뭔데? 경량화된 프로세스 -> CPU의 이용을 하는데 있어서 기본적인 단위! 쓰레드도 ID가 있고 PC(Program Counter), 레지스터 셋, 스택 메모리 공간을 할당받는다. 사용 예시)웹서버 멀티 스레딩 프로그래밍의 장점 1. 반응성이 높아진다. -> 실행을 지속시키는 것이 가능하다. 2. 자원의 공유성 -> 스레드는 프로세스의 자원 공간을 어느 정도 공유를 하기 때문에, 메모리-공유나 또는 메세지 패싱같은 것이 더 간단해진다. 3. 경제성 -> 컨텍스트 스위칭을 하는데 드는 값이 멀티 프로세싱보다 싸다. (오버헤드가 적다) 4. 확장성.. [OS] 프로세스 간 통신 프로세스 통신! 2개 이상의 프로세스가 동시에 실행중이라고 가정을 해봅시다. 동시에 이 프로세스들은 독립적인 프로세스 / 협력적인 프로세스 독립적인 프로세스 : 딱히 데이터를 주고받지 않는 즉 공유하지 않는 경우 협력적인 프로세스 : 데이터를 공유하는 프로세스 다른 프로세스의 영향을 받거나 반대로 영향을 줄 수 있다. 그리고 이 과정에서 다른 프로세스와 데이터를 공유를 할 것이다. IPC(Inter-Process Communication) : 프로세스 간 통신 협력적인 프로세스는 IPC 메커니즘이 필요하다! 즉 이 말은 데이터를 교환할 수 있게 해주고, 이 과정에서 수신 데이터와 송신 데이터가 생긴다는 뜻이다. IPC 방법으로는 크게 두가지 방법 1. shared memory : 메모리 공간을 따로 두고.. 이전 1 2 다음