IOCP 생성

 

CreatIoCompletionPort 함수원형

(

HANDLE fileHandle// IOCP와 연결할 핸들. 첫 생성시는 INVALID_HANDLE_VALUE 넘김

HANDLE ExistingCompletionPort, //IOCP 핸들. 역시 첫 생성시는 NULL.

ULONG_PTR CompletionKey, //IO 완료시 넘어갈 값. 사용자가 넘기고 싶은 값 넘김.

DWORD NumberOfConcurrentThreads //한 번에 동작할 수 있는 최대 스레드 개수 0을 넘기면 프로세서 숫자로 자동 지정됨.

 

sysinfo

struct sysinfo {
   long uptime; // 부팅 이후 지나간 초단위 시간
   unsigned long totalram; // 사용할 수 있는 총 메모리 크기
   unsigned long freeram; // 이용할 수 있는 메모리 크기
   unsigned long sharedram; // 공유 메모리의 양
   unsigned long bufferram; // 버퍼에 의해 사용된 메모리
   unsigned long totalswap; // 총 스왑 공간의 크기
   unsigned long freeswap; // 이용할 수 있는 스왑 공간
   unsigned short procs; //현재 프로세스의 수
   char _f[22]; /* 구조체를 64 bytes로
채운다(pad)*/
};

'프로그래밍' 카테고리의 다른 글

19/10/1 이벤트 스레드, 스레드 풀  (0) 2019.10.01
Select 서버 모델  (0) 2019.09.24

| 동기 입출력

- 애플리케이션은 입출력 함수를 호출한 후 입출력 작업이 끝날때까지 대기

- 입출력 작업이 끝나면 입출력 함수는 리턴하고 애플리케이션은 입출력 결과를 처리하거나 다른 작업을 진행

 

 

| 비동기 입출력

- 애플리케이션은 입출력 함수를 호출한 후 입출력 작업의 완료 여부와 무관하게 다른작업 수행

- 입출력 작업이 끝나면 운영체제는 작업 완료를 애플리케이션에게 알려줌. 이때 애플리케이션은 다른 작업을 중단하고 입출력 결과를 처리

 

| Overlapped 모델(비동기 입출력 + 비동기 통지)

 

사용 절차

1. 비동기 입출력을 지원하는 소켓 생성

2. 비동기 입출력을 지원하는 소켓 함수 호출

3. 운영체제는 소켓 입출력 작업 완료를 애플리케이션에게 알려주고(= 비동기 통지), 애플리케이션은 결과를 처리

 

 

비동기 함수 -> 확장함수 

 

| Asynchronous Procedure Call (APC)

 

콜함수 -> 사용자

콜백함수 -> 운영체제]]

'프로그래밍 > 시스템프로그래밍' 카테고리의 다른 글

프로세스 스케쥴링  (0) 2019.10.01
Signaled vs Non signaled  (0) 2019.09.30
프로세스간의 통신  (0) 2019.09.30
timer 함수  (0) 2019.09.26
1.3 쓰레드의 동기화  (0) 2019.09.25

- TCP ( Transmission control protocol) 연결설정은 3-WAY 핸드셰이킹 -> 수신 측에서 데이터를 수신 했을 때 이 사실을 송신 측에 통보 하는것을 핸드셰이킹

 

확인 응답 -> ACK(ACKnowledgement) 이 응답 확인이 있어야 다음 데이터를 전송 할 수 있다 

     >수신 측에서 데이터 수신 후에도 네트워크 문제로 재전송 될 때가 있다. 이 경우 재전송한 데이터는 데이터는 폐기해야되는데 순서 번호를 설정하여 구분 가능

 

- 포트번호 -> 전송계층의  식별자 , TCP로 보내기 위한 데이터의 이동통로 , 임의의 사용자는 9000번대 이상부터

   > 응용계층에서는 Process ID로 식별함, 네트워크는 IP , 데이터 링크는 MAC

 

- 포트번호 -> 전송계층의 식별자, 응용계층과 전송 계층을 연결하는 지정된 데이터 이동통로

 

- MTU -> Maximum Transmission Unit

 

- 한번에 전송하는 패킷의 개수를 '윈도우 크기' 또는 '수신의 버퍼의 크기'라고 한다.

 

- 전송단위 -> 응용(메세지), 전송(패킷), 네트워크(패킷), 데이터링크(프레임), 물리(bit)

 

 

 

 

| WSAEventSelect() 모델 

 

- 이벤트 객체를 통해 네트워크 이벤트 감지

 

이벤트 객체 생성과 제거 -> WSACreateEvent 함수를 이용해 이벤트 객체 생성

소켓과 이벤트 객체 짝짓기 -> WSAEventSelect

이벤트 객체의 신호 상태 감지하기 -> WSAWaitForMultipleEvents

구체적인 네트워크 이벤트 알아내기 -> WSAEnumNetworkEvents

 

| 스레드 풀

 

- 스레드가 생성과 소멸을 반복하면 시스템에 큰 부담이 된다. 스레드를 소멸시키지않고 다시 사용하는 것이 스레드 풀

- 스레드가 일을 한다는 것 -> 스레드가 호출해서 실행 할 함수를 지정해 준다는 것

 

 

 

- AddWorkToPool 유저함수

 

 

 

'프로그래밍' 카테고리의 다른 글

19/10/15 겜서실  (0) 2019.10.15
Select 서버 모델  (0) 2019.09.24

| 일반 OS 와 RTOS

 

- 일반 OS는 비선점형 OS와 선점형 OS가 있다.

 

비선점형 OS은 실행 중인 프로세스보다 높은 우선순위의 프로세스가 등장한다고 해서 실행의 대상을 바로 변경하지 않는다.

선점형 OS는 현재 실행 중인 프로세스보다 높은 우선순위의 프로세스가 등장하면 스케줄러에 의한 실행순서가 적극 조정된다.

 

- RTOS는 softRTOS와 hardRTOS가 있다.

 

| 우선순위 스케줄링 알고리즘

 

우선순위가 높은 프로세스가 먼저 실행됨, 선점형 OS의 대표적인 특징

 

| 라운드 로빈 스케줄링 알고리즘

 

우선순위가 같은 프로세스들간 형평성 유지를 위해, 정해진 시간 간격만큼 실행을 하고 우선순위가 동일한 다른 프로세스에게 CPU할당을 넘기는 방식으로 제공된다. 오로지 형평성을 위해서

 

| 스케줄링 알고리즘에 의해서 스케줄링이 진행되는 시점

 

1. 매 타임 슬라이스에 맞춰서 스케줄러 동작

2. 프로세스가 생성 및 소멸될 때마다 스케줄러 동작

3. 현재 실행 중인 프로세스가 블로킹 상태에 놓일 때마다 스케줄러 동작

 

| Priority Inversion

 

우선순위 프로세스가 뒤 바뀌는 현상

 

'프로그래밍 > 시스템프로그래밍' 카테고리의 다른 글

비동기 서버 모델 모음  (0) 2019.10.08
Signaled vs Non signaled  (0) 2019.09.30
프로세스간의 통신  (0) 2019.09.30
timer 함수  (0) 2019.09.26
1.3 쓰레드의 동기화  (0) 2019.09.25

- 커널 오브젝트는 두가지의 상태를 지닌다 signaled 상태(신호를 받은 상태) , non singnaled 상태(신호를 받지 않은 상태)

- 프로세스 커널 오브젝트의 상태는 한번 signaled 상태로 변하면 다시 non-signaled 상태로 변경되지않는다.

 

| 커널 오브젝트의 두 가지 상태를 확인하는 용도의 함수

 

- waitforsingleobject

 

DWORD WaitForSingleObject(

      HANDLE hHandle,

       DWORD dwMilliseconds

);

 

hHandle이 가르키는 커널 오브젝트가 singled상태가 되었을 때 반환한다. 커널 오브젝트가 singled 상태가 될 때 까지 기다리는 함수이다. dwMilliseconds는 커널 오브젝트가 singled 상태가 될 때까지 기다릴 수 있는 최대 시간을 밀리세컨드 단위로 지정하는 용도로 사용하는 인자이다. 만약 상수를 INFINITE로 전달하는 커널 오브젝트가 singled상태가 될 때 까지 무한정 대기함

 

- waitformultipleobject

 

DWORD WaitForMultipleObjects(

   DWORD nCount,

   const HANDLE *lpHandles,

   BOOL bWaitAll,

   DWORD dwMilliseconds

);

 

커널 오브젝트가 둘 이상이고, 이들의 핸들이 배열로 묶여 있다면 이 함수를 활용하는것이 효과적

nCount : 배열에 저장되어 있는 핸들의 개수를 전달

lpHandles : 핸들을 저장하고 있는 배열의 주소정보를 전달

bWaitAll : 관찰대상이 하나라도 singled상태인지 모두 singled상태가 되면 반환할 것인지 결정짓는다

 

'프로그래밍 > 시스템프로그래밍' 카테고리의 다른 글

비동기 서버 모델 모음  (0) 2019.10.08
프로세스 스케쥴링  (0) 2019.10.01
프로세스간의 통신  (0) 2019.09.30
timer 함수  (0) 2019.09.26
1.3 쓰레드의 동기화  (0) 2019.09.25

메일슬롯 방식의 IPC

 

- 메일슬롯 방식은 파이프와 더불어 대표적인 IPC 기법

- 메일슬롯은 브로드캐스팅 방식의 통신을 지원

'프로그래밍 > 시스템프로그래밍' 카테고리의 다른 글

프로세스 스케쥴링  (0) 2019.10.01
Signaled vs Non signaled  (0) 2019.09.30
timer 함수  (0) 2019.09.26
1.3 쓰레드의 동기화  (0) 2019.09.25
1.2 쓰레드의 생성과 소멸  (0) 2019.09.25

BOOL SetWaitableTimer(
   HANDLE hTimer,
   const LARGE_INTEGER *lpDueTime,
   LONG lPeriod, // 0이하 이면 한번만 실행
   PTIMERAPCROUTINE pfnCompletionRoutine,
   LPVOID lpArgToCompletionRoutine,
   BOOL fResume
)
;

 

다양한 방법

- timer 스레드를 하나 더 생성해서 timer가 끝나면 signaled상태로 전환 , 스레드 200개 생성 방법

- 전체를 관장하는 메인스레드를 하나 만든다. 

 

 

구현해야할 것 

- 랜덤으로 우선순위 스레드 5개를 생성

- 스레드 200개 생성

- 30분마다 빈자리 체크

 

- cpu 친화도

'프로그래밍 > 시스템프로그래밍' 카테고리의 다른 글

Signaled vs Non signaled  (0) 2019.09.30
프로세스간의 통신  (0) 2019.09.30
1.3 쓰레드의 동기화  (0) 2019.09.25
1.2 쓰레드의 생성과 소멸  (0) 2019.09.25
1.1 쓰레드  (0) 2019.09.24

+ Recent posts