본문 바로가기

프로세스25

34. 스레드 - detach와 mutex 0. 시작하기전에 - 이전 포스팅에서 스레드에 대해서 배우면서, 스레드 관리를 위한 기본적인 함수들을 알아봤다. - 이번 포스팅에서는 추가적인 스레드 함수와 동기화에 대해서 알아보자. 1. pthread detach - 스레드를 해제시키는 함수에는 2가지가 있다. ▶ pthread_join - 추가 생성된 스레드가 종료될 때까지 메인 스레드는 대기상태가 된다. - 추가 스레드의 작업이 종료되면 스레드 자원을 해제한다. ▶ pthread_detach - pthread_join을 기다리지 않고, 호출 즉시 스레드 리소스(메모리 영역)를 해제한다. - 즉, 추가된 스레드의 작업을 진행하지 않고 바로 스레드 리소스를 해제하게된다. - 다음 함수의 원문을 보자. // thread: detach할 스레드의 식별자 .. 2021. 9. 25.
27. 프로세스 - IPC 기법(shared memory) 0. 시작하기전에 - 이전 포스팅에서 IPC기법 중 pipe와 message queue 기법을 직접 구현해 보았다. - 이번 포스팅에서는 다른 종류의 IPC기법을 실습해 볼 예정이다. 1. ipcs 명령어 - ipcs 명령어는 현재 커널공간에 생성되어 있는 message queue, 공유메모리, 세마포어를 확인할 수 있다. - 아래의 사진처럼, 현재 커널 공간을 활용하고 있는 메모리를 보여준다. a) 메세지 큐를 송수신 해보자. - 우선, 이전 포스팅에서 만들어 놓은 메세지 큐 송수신 프로그램을 실행시켜보자. - 위의 사진은 Message queue를 전송한 후 ipcs명령어를 입력한 것이다. - message queue가 50bytes의 크기로, 1개의 메세지를 담고 있다는 것을 보여준다. - 그렇다면.. 2021. 9. 21.
25. 프로세스 - 우선순위 스케줄링 시스템 콜 0. 시작하기전에 - 이번 포스팅에서는 프로세스 스케줄링과 관련된 시스템 콜에 대해서 배울 예정이다. 1. 우선순위 기반 스케줄러 (priority based) - 우선순위를 기반으로 프로세스의 실행순서를 정하는 스케줄링 방식이다. a) 리눅스는 우선순위에 크게 영향을 받지 않는다. - 리눅스는 우선순위에 크게 영향을 받는 스케줄링 방식을 사용하지 않는다. - 당연히, 우선순위를 확인하고 이에 따라 실행되도록 하는 시스템 콜이 존재하지만, b) 그렇다면 왜 리눅스는 우선순위 기반의 스케줄링을 지원하는가? - 리눅스 운영체제 자체가 우선순위에 크게 중점을 두지 않은 방식으로 스케줄링을 하도록 설계되어있다. - 그렇다면 왜 우선순위 스케줄링의 시스템 콜을 제공할까? 이는 POSIX 규격으로 운영체제를 표준화.. 2021. 9. 17.
24. 프로세스 - 프로세스 생성과 종료 총정리 0. 시작하기전에 - 이번 포스팅에서는 이전까지 배운 프로세스 관련 시스템 콜에 대해서 총정리를 할 예정이다. - 추가적으로 wait() 시스템 콜에 대해서 깊이있게 다뤄볼 것이다. 1. 프로세스 생성부터 종료까지 - 아래의 그림을 통해서 전체적인 프로세스 생성 및 종료 과정을 복습해보자. a) 새로운 프로세스를 생성하는 방법 - fork() 시스템 콜을 이용하여 기존의 프로세스를 복사하는 방식으로 새로운 프로세스를 생성한다. - 복사의 대상이 되는 기존 프로세스를 부모 프로세스라고 부른다. - 복사를 통해 새로 생성된 프로세스를 자식 프로세스라고 부른다. - 이를 통해, 프로세스 간의 계층이 형성된다. - fork() 시스템 콜은 PID 값을 반환하는데, 이를 통해서 부모와 자식 프로세스를 구분할 수 .. 2021. 9. 17.
22. 프로세스 - copy on write 0. 시작하기전에 - 리눅스 프로세스 생성 속도를 높이는 copy on write 기술을 알아볼 예정이다. - 이를 이해하기 위해서는 기본적으로 리눅스의 프로세스 구조와 가상메모리 시스템간의 메커니즘을 이해해야한다. - 이 부분은 운영체제 파트에서 깊게 다루었던 내용이기 때문에, 간략하게 복습해보자. 1. 리눅스 프로세스 구조 a) 프로세스의 기본구조 - 모든 프로세스는 4GB의 가상메모리를 할당받는다. - 3GB ~ 4GB의 가상메모리 주소는 OS 코드가 들어있는 커널 영역에 할당된다. - 0GB ~ 3GB의 가상메모리 주소는 응용프로그램의 코드가 들어있는 사용자 영역에 할당된다. - 프로세스 메모리로 알고있는 text, data, bss, heap, stack은 사용자 영역에 존재한다. b) 모든 프.. 2021. 9. 16.
20. 프로세스 - 프로세스 생성(exec) 1. exec() - 프로세스를 생성하는 방법 - exec() 시스템 콜을 호출한 프로세스의 Text, BSS, Data 공간에 새로운 프로세스에서 사용할 코드 이미지를 덮어씌운다. - 별도의 프로세스를 생성하는 방식이 아니라, 기존의 프로세스를 재활용하는 방식으로 새로운 프로세스를 생성한다. 2. exec() 시스템 콜의 원형 - exec() 함수는 기존의 프로세스의 공간을 재활용 하는 방식으로, Text, BSS, DATA영역을 재활용 한다. - 그러므로 parameter를 통해 덮어씌울 데이터를 입력받는다. - 하나씩 알아보자. a) execl() 시스템 콜의 구조 excel("파일의 절대주소", "argv[0]", "argv[1]", ... , NULL( - argv는 arguement를 의미하는.. 2021. 9. 15.
19. 프로세스 - 프로세스 생성(fork) 0. 시작하기전에 - 프로세스의 구조가 어떻게 되어있는지 복습해보자. https://devraphy.tistory.com/159 13. 프로세스 구조(1) 프로세스와 컨텍스트 스위칭 스케줄러에 의해 어떤 프로세스에서 다른 프로세스로 바뀌는 과정을 컨텍스트 스위칭이라고 한다. 이 컨텍스트 스위칭을 이해하기 위해서는 프로세스의 구조에 대 devraphy.tistory.com 1. 프로세스 생성 a) 기본적인 프로세스 생성과정 - 5가지 프로세스 메모리 공간(Text, Data, BSS, Heap, Stack)이 생성된다. - 코드 이미지가 각 프로세스 공간에 업로드되고, 실행된다. b) 프로세스 계층의 형성 - 이전 포스팅에서 다룬 내용이므로 간략하게 복습해보자. - 리눅스에서는 프로세스를 생성할 때, 기존.. 2021. 9. 15.
17. 프로세스 - 프로세스 ID 0. 시작하기전에 - 프로그램, 프로세스, 스레드에 대해서 간략하게 복습해보자. ▶ 프로그램 - 바이너리, 코드이미지, 응용프로그램, application, 실행파일 등의 다양한 형태로 존재한다. ▶ 프로세스 - 현재 실행중인 프로그램으로, 메모리에 적재되어 있으며 프로세스 상태정보(PCB)를 사용하여 처리한다. ▶ 스레드 - 프로세스 내부에 나뉘어져 있는 세부 작업을 가리킨다. - 리눅스 프로세스는 기본적으로 싱글스레드 형식을 가진다. - 싱글스레드 프로세스: 기본 프로세스 - 멀티스레드 프로세스: 여러 스레드가 존재하는 프로세스 1. 프로세스 ID - 각 프로세스에 부여되는 프로세스 고유번호, PID - PID의 최대값은 32768이다. (2의 15승) - 부호형(signed) 16비트 정수값을 사용.. 2021. 9. 15.
10. shell - 프로세스 관리 및 제어 1. process 제어 명령어 - foreground process를 사용하면, 어떤 프로그램을 수행하는 중에는 다른 작업을 할 수 없다. - 만약 다른 작업을 해야한다면, 프로세스를 아예 종료하거나 잠시 중단시킬 수는 있을까? a) control + z (커맨드 입력 방식은 환경에 따라 다를 수 있으니, 참고하기를 바랍니다.) - 컨트롤 + z는 foreground에서 실행중인 프로세스를 잠시 멈추는 커맨드다. - 앞에 있는 숫자 1을 Job이라고 한다. ▶ Job - background process의 작업번호 - 여기서 알 수 있는 것은 foreground process가 background process로 넘어갔다는 점이다. - 진행중이던 프로그램을 멈추기 위해, 그동안의 수행기록을 지우는 것이.. 2021. 9. 9.