System Programming 4

#020_WIndow_System_멀티 쓰레드 공유 메모리

안녕하세요 삽잡이입니다.이번 시간에는 쓰레드 동기화에 대해서 알아보려고 합니다. 쓰레드는 각각 독립적으로 움직이기 때문에, 공유 변수에 더욱 주의를 해야합니다.그렇지 않으면 쓰레드에 정말로 많은 문제가 발생하게 됩니다.공유 메모리에 신경쓰지 않게 되어 발생한 오류는동기화와 관련된 문제로써 에러를 찾기 상대적으로 힘들어집니다. 여러개의 독립적인 쓰레드가 하나의 공유 메모리를 사용할 경우를 생각해보겠습니다.만약, 0번째 쓰레드가 Write 중인데 나머지 쓰레드들은 Read를 하고 있다면,메모리가 변경이 되는 것인데, Read를 하던 녀석들은 당황하겠지요...결과적으로 Memory Fault가 발생하는데, 이 문제는 심각한 문제입니다. 강조하지만, 원천적으로 공유 메모리는 쓰레드에서는 문제가 많습니다.하지만,..

#015_WIndow_System_명령행 인자

안녕하세요 삽잡이 입니다.이번 시간에는 명령행 인자에 대해서 알아보려고 합니다. 자... 우리가 C언어 공부를 할 때 한번쯤을 봤을 코드입니다. 위 코드의 int main(int argc, char**argv) 이 시그니처는.. main 함수의 원형을 나타냅니다.그리고 많이들 들어보셨겠지만, '프로그램을 실행할 때 기존에 설정한 값을 넣어서 프로그램을 실행 시킬 수 있다'라는 설명들을 많이들 보셨을 것입니다. 그냥 아무 것도 건들지 않은 상태에서 해당 프로그램을 실행 시키게 되면,프로그램명이 출력되는 것을 확인하실 수 있습니다. 그런데 위에서 설명한 '기존에 설정한 값' 이란,우리는 프로그램 인수라고 할 수 있습니다. 즉, main함수에 프로그램 인수를 받아 실행시킬 수 있다는 것입니다.비주얼 프로그램에..

#014_WIndow_System_프로세스 생성

안녕하세요 삽잡이 입니다.이번 시간에는 프로세스를 생성하는 할때에 대해 생각해보려고 합니다. 프로세스를 생성하기 위해서는 우선 CreateProcess 함수를 사용해야합니다. 많은 인자들이 있지만, 맨 마지막의 두 인자들을 우리는 주목해야합니다.아홉번째 인자는, 프로세스 시작 정보가 담길 구조체 변수이며,마지막 인자는, 프로세스 시작 시에 옵션등이 담겨있는 구조체를 넣습니다.즉, 두 인수는 설정 값과 받아오는 값이라고 할 수 있습니다. 아무튼...우리는 CreateProcess 함수를 사용하여 프로세스를 생성할 때,프로세스는 프로그램의 인스턴스로써, 프로세스를 실행하겠다는 것은프로그램의 코드가 존재한다는 뜻이겠지요. 프로그램의 코드 즉, 해당 윈도우는 생성하기 위해 당연하게 CreateWindow 함수를..

#013_WIndow_System_시스템 프로그래밍이란? & PID에 관하여

안녕하세요 삽잡이입니다. 이전 시간까지 어플리케이션을 사용할 수 있도록 API를 배웠습니다.API는 OS의 라이브러리를 쓰는 것이라고도 할 수 있는데...이 API에는 시스템 프로그래밍에 관해서도 포함되어 있습니다.이번 시간부터는 시스템 프로그래밍에 대해서 배워보도록 하겠습니다. 일반적으로 OS의 동작 원리를 이해하고 알아가는 것이 시스템 프로그래밍이라고 할 수 있습니다.시스템 프로그래밍에는 쓰레드, 프로세스, DLL, 메모리, 동기화 오브젝트, 커널 오브젝트등이 해당됩니다. 아무튼...OS의 구조를 이해하고, OS와 밀접하게 연관된 프로그램과 관련된 요소들을 공부해보자는 것이 바로, 시스템 프로그래밍입니다. 물론, 현 시절 MS에서는 .NET을 밀고 있는 추세로서,.NET에는 OS API가 굳이 필요가..