Computer(인강)/시스템 프로그래밍(40)
-
프로세스 스케쥴링 관련(참고)
시스템콜 종류 살펴보기 첫번째, nice() 시스템콜 우선순위를 변경하는 시스템콜로 프로세스 중 사실상 root가 소유한 프로세스만, 우선순위를 높일 수 있음 1) 다른 프로세스는 우선순위를 낮출수만 있음 2) 스케쥴링 방식에 따라 우선순위가 적용될수도 있고, 안될수도 있음 우선순위 변경하기 getpriority(), setpriority() getpriority() : 현재 이 시스템콜을 실행하고 있는 프로세스와 관련된 우선순위값을 얻어내는 시스템콜 setpriority() : 현재 프로세스 또는 프로세스와 관련된 리소스에 대해서 priority를(우선순위 값을)매겨주는 시스템콜 int which의 which인자는 어떤 자원의 우선순위를 가져오겠냐, 라는것인데 아래에 따라 우선순위가 나뉜다. PRIO_..
2021.03.09 -
프로세스 생성과 종료 총정리 및 wait 시스템콜 상세
안녕하세요 bannavi입니다^ㅅ^ 오늘은 프로세스 생성과 종료에 대해 총정리 해보는 시간을 갖겠습니다 바로 시작하겠습니다! 우선 새로운 프로세스를 생성할때는 부모프로세스안에 fork()라는 명령을 넣어서 동일한 데이터를가진 프로세스 공간을 생성함. 그럼 자식 프로세스도 동일한 프로세스를 갖게되고 fork()를 실행한 다음칸에 pc가 놓여져서 다음 라인부터 실행을 할텐데 이 return값이 pid값을 주는데 pid값을 기반으로 자식 프로세스냐, 부모 프로세스냐를 구분할 수 있고 자식프로세스와 부모프로세스의 이 pid값을 기반으로 조건문을 사용해서, 자식 프로세스인 경우에는 exec()프로그램으로 시스템콜로 인자를 실행파일이름을 넣어서 실행을 시키면 해당 실행파일 이미지로 자식프로세스가 덮어씌워지고 다시 ..
2021.03.09 -
프로세스 종료
안녕하세요 bannavi입니다^ㅅ^ 오늘은 프로세스 종료에 대해서 살펴보려고 합니다 바로 시작해보겠습니다 프로세스 종료 * exit() 시스템 콜: 프로세스 종료 main 함수의 return = 0;과 exit(0);의 차이는? * exit() 함수 : 즉시 프로세스를 종료함 (exit() 함수 다음에 있는 코드는 실행되지 않음) * return 0 : 단지 main이라는 함수를 종료함 단, main에서 return시, C언어 실행파일에 기본으로 포함된 _start()함수를 호출하게 되고, 해당 함수는 결국 exit() 함수를 호출함 # main() 함수에서 return 0;은exit()호출과 큰 차이가 없음 * 부모 프로세스는 status & 0377(비트연산) 계산 값으로 자식 프로세스 종료 상태..
2021.03.09 -
프로세스 생성(copy on write)
안녕하세요 bannavi입니다^ㅅ^ 오늘은 프로세스 생성에 대해 배워볼거에요 바로 시작해보겠습니다 프로세스 당 4GB 가상 메모리 할당 사용자(0GB ~ 3GB), 커널(3GB ~ 4GB) 실제로 커널에 할당한 가상메모리는 프로세스간 공유 copy-on-write - fork()는 새로운 프로세스 공간 생성 후, 기존 프로세스 공간 복사 - 4GB를 복사한다면, 프로세스 생성 시간이 오래걸림 1. 자식프로세스 생성 시, 부모 프로세스 페이지를 우선 사용 2. 부모 또는 자식프로세스가 해당페이지를 읽기가 아닌 쓰기를 할 때, 3. 이 때 페이지를 복사하고, 분리함 4. 장점 : 프로세스 생성시간을 줄일 수 있음, 새로 생성된 프로세스에 새롭게 할당되어야 하는 페이지 수도 최소화 copy-on-write(r..
2021.03.09 -
프로세스 생성(wait)과 나만의 쉘만들기
안녕하세요 bannavi입니다^ㅅ^ 오늘은 프로세스 생성과 나만의 쉘만들기 부분을 실습해보겠습니다 바로 시작하겠습니다 fork()와 exec() 리눅스 프로세스 실행 1. 부모 프로세스로부터 새로운 프로세스 공간을 만들고, 부모 프로세스 데이터 복사(fork) 2. 새로운 프로세스를 위한 바이너리를 새로운 프로세스 공간에 덮어씌움(exec) 지난 시간에 이 두개를 배웠었죠, 여기서 드는 의문점 하나 왜 두개를 나눴을까...싶은거죠 fork와 exec가 순차적으로 실행이 되서 자식 프로세스가 생성이 된다. 이게 리눅스의 프로세스 생성 방식이다. wait() 시스템콜 1. wait함수를 사용하면, fork()함수 호출시 자식 프로세스가 종료할 때까지, 부모 프로세스가 기다림 2. 자식 프로세스와 부모 프로세..
2021.03.08 -
프로세스 생성(exec)
안녕하세요 bannavi입니다^ㅅ^ 오늘은 프로세스 생성(exec)에 대해 배워보도록하겠습니다 바로 시작하겠습니다 fork()시스템콜과 exec()시스템콜 exec() 시스템콜 family execl() 시스템콜의 예 전체 파일 이름을 맨앞의 첫번째 인자로 둠, 두번째 인자는 1개~3개 등 이 될 수 있음. 여기서 잠깐, argv가 뭐였지.. execl() 시스템콜이 제대로 실행이 됐다면 아래가 실행이 안될것. execl()과 execlp() 시스템콜 사용법 execle() 시스템콜의 사용법 execv(), execvp(), execve() 시스템콜 사용법 인자를 다른 변수로 만들어서 미리 넣어줄 수 있다..! execve() 시스템콜은 환경변수도 미리 만들고, 인자도 미리 만들었네요 정리 p로 끝나는 ..
2021.03.08