Programming 29

[Windows System] 파일 입출력(File Input/Output)

파일 열기 : HANDLE CreateFile( LPCTSTR lpFileName, // 개방(open)할 파일 이름 DWORD dwDesiredAccess, // 읽기/쓰기 모드를 지정한다.(or (l) 연산으로 결합) GENERIC_READ : 읽기 모드 GENERIC_WRITE : 쓰기 모드 DWORD dwShareMode, // 파일 공유방식 0 : 다른 프로세스에 절대 공유 불가. 중복 개방 불가 FILE_SHARE_READ : 다른 프로세스에서 동시 읽기 접근 가능 FILE_SHARE_WRITE : 다른 프로세스에서 동기 쓰기 접근 가능 LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 보안 속성 DWORD dwCreationDisposition, // 파일의..

[Windows System] 가상 메모리(Virtual Memory)

개념 : (가정 : 16비트 시스템(0 ~ 64K -1 주소), 프로세스별로 64KB의 가상 메모리 할당, 메인 메모리 16KB) MMU(Memory Management Unit) : 실제로 존재하는 메모리 크기를 가상 메모리 크기만큼 존재하는 것처럼 CPU가 느끼도록 컨트롤 한다.(ex. 1GB 램의 메모리를 4GB의 메모리가 존재하는 것처럼 CPU가 느끼도록 한다) 가상 메모리 구성에 필요한 시스템의 기본 기능(메모리 할당 및 변환)을 제공한다. (CPU와 함께 하나로 패키징(Packaging) 되있다) CPU - > MMU : 메인 메모리에서 사용되지 않는 메모리 블록 하나를 골라서 할당 (1K부터 20바이트 할당요청) 20바이트를 할당 요청했음에도 메모리 블록은 4K 바이트 단위라서 4 K 를 할..

Windows에서 소켓프로그래밍하기-기초

으흠~~ 소켓프로그래밍을 할 때 꼭 들어가야 하는 필수 함수들을 정리해보고 가자~~!! (이렇게 정리를 하고 가면 나중에 까먹어도 쉽게 찾을 수 있으니깐~~) Let's~~~~~~~~~~~~~~~ GO~!!! ========================================================================================== 소켓 통신을 할 때 윈도우즈에서 가장 먼저 시행되어야 할 함수는 WSAStartup()함수이다. 머하는 함수인고 하니... 사용할 윈도우소켓의 버전을 명시하고, 소켓 관련 정보들을 리턴하는 함수. 이 함수를 실행시키지 않으면 다른 소켓관련 함수들을 쓸 수 없다고 한다. 인자 값으로는 2개의 인자가 들어간다. 인자의 용도와 인자의 쓰임을 정..

[Windows System] 쓰레드(Thread) 동기화에 대한 개념정리

쓰레드 동기화 : 쓰레드 간의 질서가 잘 지켜지고 있음을 의미 쓰레드 동기화의 방법 : 유저 모드 동기화 : 동기화가 진행되는 과정에서 커널 코드가 실행되지 않는다. 커널 모드로의 전환이 이뤄지지 않으므로 성능상에 이점이 있지만 기능상의 제한도 있다. 커널 모드 동기화 : 커널에서 제공하는 동기화 기능을 활용한다.(유저 모드에서 제공하지 못하는 기능을 제공받을 수 있다) 커널 모드로의 전환으로 인해 성능이 저하된다. 두가지 관점에서의 쓰레드 동기화 : 메모리 접근에 대한 동기화 : 쓰레드들의 임계 영역 동시접근을 막아 동기화한다. (참고 : 임계 영역(Critical Section) : 배타적 접근(한 순간에 하나의 쓰레드만 접근)이 요구되는 공유 리소스(전역변수와 같은)에 접근하는 코드 블록) (예 :..

[Windows System] 쓰레드(Thread) 동기화 - 순차 실행 관점

이벤트(Event) 기반 동기화 : 개념 : 생산자는 문자열을 생성한다(입력받는다), 소비자는 문자열을 소비한다(출력한다) 생산자가 문자열을 생성하고 나면, 이 상태를 감지한 소비자가 문자열을 가져가 소비한다. 이벤트 커널 오브젝트의 특성 : 1. 이벤트 커널 오브젝트는 파라미터에 의해 Signaled or Non-Signaled 상태로 생성된다. 2. 프로그래머의 요청에 의해 Signaled 상태가 된다. 3. 자동 리셋 모드 일시 WaitForSingleObject 함수 호출로 Signaled -> Non-Signaled 상태로 변경된다. 수동 리셋 모드 일시 추가로 ResetEvent 함수를 사용한다. 사용법 : HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEven..

[Windows System] 쓰레드(Thread) 동기화 - 메모리 접근 관점

1. 크리티컬 섹션 기반의 동기화(유저 모드) : 개념 : 열쇠(Critical Section)를 생성한다. 쓰레드가 임계 영역에 접근하기 위해서는 열쇠를 얻어야 한다. 열쇠를 얻어 임계 영역에 접근한 쓰레드는 일을 마친후 다음 쓰레드를 위해 열쇠를 반환한다. 사용법 : CRITICAL_SECTION gCriticalSection; // 열쇠를 생성한다 // 크리티컬 섹션 오브젝트 선언후에는 반드시 초기화 해야한다. void InitializeCriticalSection( // 크리티컬 섹션 오브젝트 초기화 함수 LPCRITICAL_SECTION lpCriticalSection // 초기화 하려는 크리티컬 섹션 오브젝트의 주소값 ); void EnterCriticalSection( LPCRITICAL_S..

[Windows System] 쓰레드(Thread)의 생성과 소멸

쓰레드 생성 : HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // 보안속성(TRUE : 상속, NULL : 상속제외) SIZE_T dwStackSize, // 쓰레드의 스택 크기 LPTHREAD_START_ROUTINE lpStartAddress, // 쓰레드로 동작하기 위한 함수(쓰레드 main) // 리턴타입 DWORD, 매개변수 타입 LPVOID(void*) LPVOID lpParameter, // 쓰레드 함수에 전달할 인자 지정 DWORD dwCreationFlags, // 쓰레드 생성 및 실행을 조절 LPDWORD lpThreadId // 쓰레드 ID를 전달받기 위한 변수의 주소값 ); 쓰레드 소멸 : 1. return(일반적,..

[Windows System] 쓰레드(Thread) 소개

쓰레드(Thread) : 하나의 프로그램 내에서 여러 개의 실행 흐름을 두기 위한 모델 1. 독립적인 스택(Stack)을 가진다. 2. 코드 영역을 공유한다. (위와 같이 쓰레드 main 함수는 코드 영역에 존재하는 모든 함수를 호출할 수 있다) 3. 데이터 영역과 힙을 공유한다.(전역변수와 동적 할당된 메모리 공간 공유 가능) 4. 프로세스 핸들 테이블 공유 프로세스 핸들 테이블에 대한 핸들 정보는 프로세스 내의 쓰레드 들에게 공유되어 각 쓰레드가 그 핸들에 대해 접근이 가능하다 (참고 : 같은 프로세스내의 쓰레드들은 스택 이외의 모든 것을 공유한다) 프로세스와 쓰레드 Windows 에서 프로세스는 단순히 쓰레드를 담는 상자다. 실제 프로그램 흐름을 형성하는 것은 쓰레드이다. 따라서 스케줄러(Windo..

컴퓨터 프로그래밍 개발을 위한 정보와 이야기

보통 방학때 포트란이라던지 c언어라던지 컴퓨터언어를 가르치는 강좌가 개설되곤 하기도 했는데 리스트라던지 프롤로그라던지 인공지능관련이나 컴퓨터그래픽 관련 전문 과목은 아마 달랑 한 과목정도 일듯하다. 즉 개인이 알아서 공부해야 되는게 많다는 뜻일듯.. 사실 컴퓨터지식이 많다는 해커는 누가 가르치는 것도 아니다.. 이게 인생이다.. ㅋㅋ 자 이제 현실로 돌아와서 컴퓨터 프로그래밍을 배울려면 가장 필요한 것이 물론 컴퓨터이다. 그리고 개발툴이 필요하다. 사실 소프트웨어도 사용되는 분야에 따라 상당히 다양하다. 운영체제, 개발툴, 멀티미디어관련, 네트워킹관련, 보안관련, 데이타베이스관련, 게임관련, 그리고 연구나 산업용 전문툴까지.. 즉 하나의 지식으로 소프트산업을 보면 안되고 학문에서 자주 이야기 되는 학문융..

Programming 2011.01.24

[Windows System] 스케줄링 알고리즘과 우선순위

˚ 선점형(Preemptive) OS와 비선점형(Non-Preemptive) OS - 프로세스의 실행을 다른 프로세스로 넘기는 방식에 따라서 선점형 OS와 비선점형 OS를 구분한다. OS의 기본 개념을 공부한다는 의미에서 이 두 가지 OS의 성격을 간략히 짚고 넘어간다. · 비선점형(Non-Preemptive) OS : 현재 실행 중인 프로세스보다 높은 우선순위의 프로세스가 등장한다고 해서 실행의 대상을 바로 변경하지 않는다. 새로 등장한, 보다 높은 우선순위의 프로세스가 실행되기 위해서는 현재 실행 중인 프로세스가 명시적으로 CPU를 양보할 때까지, 혹은 I/O 작업 등으로 블로킹 상태에 놓일 때까지 기다려야만 한다. · 선점형(Preemptive) OS : 현재 실행 중인 프로세스보다 높은 우선순위의..