본문 바로가기
일상,취미

다시 시작하는 TIL 24일차

by 진득한진드기 2024. 7. 10.

오늘 한일 

 

윈도우 프로그래밍에서 파일 리스트를 가져오는 것을 구현하고, PageList에 Page를 생성하고 이벤트가 일어나면 삭제하는식의 기능을 넣었다.

 

파일 List는 자료형에 맞게 컨테이너형으로 넣어서 보관해서 return 하는 방식으로 구현하였다.

 

지금 배운지 얼마 안되서 그런지 모르겠는데 생산성이 너무 안나오는듯한 느낌이 든다.

 

포인터 같은거는 평소에 그냥 쓰는거지 라고 생각했는데 프로그램이 커지니까 포인터 하나에 웃고 포인터 하나에 울고 있는중이다.

 

진짜 화나는게 메모리가 중간에 무조건 죽어서 디버깅이 잘 안되니까 breakpoint는 진짜 꼭 필요하다.

 

학부 떄는 머리로만 해도 충분했는데 지금은 중간에 길을 무조건 잃는다.

 

오늘도 초반에 Initialize 안해서 NULL로 초기화가 안되어있어서 ㅋㅋㅋㅋㅋㅋ 저거 찾느라 한고생이었다.

 

퇴근 후 공부

 

프로세스란 뭘까 ?

프로세스란 실행중인 프로그램을 뜻한다.

 

이렇게 말하면 너무 추상적이다.

 

그러면 이렇게 받아들이는게 더 쉬울 것 같다.

 

실행중인 프로그램이라고 해서 다 프로세스라기보다 실행중인 프로그램에 관련된 메모리, 리소스 등을 총칭하는 것 

 

CPU가 A프로세스를 점유하고 있을 때는 레지스터에 A에 관련된 내용들을 집어넣어야한다.

그리고 또 다른 B프로세스를 점유하면 A 프로세스가 적혀져있던 레지스터를 비우고 그 다음 B프로세스에 정보를 레지스터에 적는다.

 

이때 뺀 A레지스터의 정보를 하드디스크에 파일 형태로 저장한다.  

 

이후에 또 A프로세스를 점유할 떄 다시 B의 정보를 적는 방식으로 이용한다. 

근데 이런 식으로 진행하게 되면 프로세스가 늘어나면 CPU 입장에서 너무 귀찮은 상황이 일어난다. 


요즘 존재하는 멀티프로세스를 지원하는 운영체제는 둘 이상의 프로세스를 동시에 생성 가능하다.

 

 

Pid?

 

운영체제는 생성되는 모든 프로세스에 ID를 할당한다.

프로세스마다 구분을 하기 위해서 Pid가 존재한다.


fork 함수의 호출을 통한 프로세스의 생성


Pid_t fork(void);

 

성공시 프로세스 Id, 실패시 -1 반환

fork 함수가 호출되면 호출한 프로세스가 복사되어 fork 함수 호출 이후를 각각 프로세스가 독립적으로 실행하게 된다.

fork 함수 호출 이후의 반환 값은 다음과 같다. 따라서 반환값의 차를 통해서 부모 프로세스와 자식 프로세스의 프로그램 흐름을 구분한다.

- 부모 프로세스 : fork 함수의 반환 값은 자식 프로세스의 ID
- 자식 프로세스 : fork 함수의 반환 값은 0

fork를 실행하면 해당 프로세스를 통째로 복사한다.

실행 중인 코드와 메모리, 레지스터 값까지 전부 복사해서 또 하나의 프로세스로 만든다.

제어의 흐름은 둘다 fork함수 이후를 같이 실행하게 된다.

fork가 완료되면 pid로 구분하여 부모 프로세스가 실행할 영역과 자식 프로세스가 실행할 영역을 나눠서 코딩해야한다.

'일상,취미' 카테고리의 다른 글

다시 시작하는 TIL 26일차  (0) 2024.07.16
다시 시작하는 TIL 25일차  (0) 2024.07.12
다시 시작하는 TIL 23일차  (0) 2024.07.08
다시 시작하는 TIL 22일차  (0) 2024.07.06
다시 시작하는 TIL 21일차  (0) 2024.07.05