프로세스의 이해
- 프로세스란?
- 메인 메모리로 이동하여 실행중인 프로그램 -> 일반적인 정의
- 프로세스의 범위
- 메모리 구조+ 레지스터 Set
- 프로세스 별 독립적인 대상은 프로세스의 범주에 포함시킬 수 있다.
- 프로세스 스케줄러
- 둘 이상의 프로세스가 적절히 실행되도록 컨트롤
- 스케줄링 방법
- 스케줄링 알고리즘에 따라 다양함.
프로세스의 상태
프로세스들을 스케줄러가 관리함
S = exe 실행
Ready = 러닝하고 싶은 상태 / 스케줄러의 명령을 기다림.
Running = 현재 실행중인 상태
Blocked = I/O연산을 기다리는 상태 / CPU의 연산이 필요없는 I/O연산(파일 네트워크, 그래픽, 사운드)을 기다리는 중
E = 종료
러닝 상태에서 CPU(ALU)에 의존적 연산이 아닌 CPU가 필요없는 I/O연산(파일 네트워크, 그래픽, 사운드)을 기다려야 할 때 블럭디드상태로 감.
Contex Switching(컨텍스트 스위칭)
A, B 프로세스들이 있다고 가정 할 때 나만의 레지스터셋을 가지고 컨텍스트 스위칭 할 때 레지스터셋을 바꿈
컨텍스트 스위칭 하는 대상이 많으면 많을수록 연산이 많아짐.
프로세스의 생성
부모 프로세스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <stdio.h> #include <tchar.h> #include <windows.h> #define DIR_LEN MAX_PATH+1 int _tmain(int argc, TCHAR* argv[]) { STARTUPINFO si = {0,}; // 정보 전달용 PROCESS_INFORMATION pi; // 정보 반환용 si.cb = sizeof(si); si.dwFlags = STARTF_USEPOSITION | STARTF_USESIZE; si.dwX = 100; si.dwY = 200; si.dwXSize = 300; si.dwYSize = 200; si.lpTitle = _T("Test!"); TCHAR command[]=_T("Test2.exe 10 20"); // 프로그램을 실행시키고 10, 20을 넣겠다. TCHAR cDir[DIR_LEN]; BOOL state; GetCurrentDirectory(DIR_LEN, cDir); //현재 디렉토리 확인. _fputts(cDir, stdout); _fputts(_T("\n"), stdout); SetCurrentDirectory(_T("파일 경로")); // 디렉토리를 바꿈 GetCurrentDirectory(DIR_LEN, cDir); //현재 디렉토리 확인. _fputts(cDir, stdout); _fputts(_T("\n"), stdout); state = CreateProcess(NULL, // 프로세스 생성. command, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi ); //CreateProcess if(state!=0) _fputts(_T("Create OK! \n"), stdout); else _fputts(_T("Create Error! \n"), stdout); return 0; } | cs |
SetCurrentDirectory 바탕화면으로 경로 변경했었는데 잘안됨...
자식 exe를 부모 디폴트 Directory에 넣음
자식 프로세스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> #include <tchar.h> #include <windows.h> int _tmain(int argc, TCHAR* argv[]) { DWORD val1, val2; val1=_ttoi(argv[1]); val2=_ttoi(argv[2]); _tprintf(_T("%d + %d = %d \n"), val1, val2, val1+val2); _gettchar(); //프로그램의 실행을 잠시 멈추기 위해. return 0; } | cs |
결과 화면
어거지로 결과를 만든기분.
SetCurrentDirectory가 왜 안될까....
구조체 정보
반응형
'Programming > System Programming' 카테고리의 다른 글
컴퓨터 구조의 접근방법 (2) | 2016.04.03 |
---|---|
Win 32 vs Win 64 (32bit vs 64bit) (0) | 2016.04.03 |
Windows에서의 유니코드(UNICODE) (3) | 2016.04.01 |
프로그램의 실행과정 / 하드웨어 구성의 재접근 (0) | 2016.03.31 |
시스템 프로그래밍이란? (2) | 2016.03.30 |