본문 바로가기

컴퓨터공학기초 개념146

28. 시그널 - 사용법 이해 0. 시작하기전에 - 운영체제 파트에서 시그널을 IPC기법으로 사용할 수 있다는 것을 배웠다. - 프로세스에서 발생한 이벤트를 조건으로 인터럽트를 발생시켜 다른 프로세스가 알게 하는 방식이었다. https://devraphy.tistory.com/175 22. 프로세스 - IPC 기법(signal, socket) - IPC 기법이란, 컴퓨터 구조적으로 불가능한 커뮤니케이션 간의 소통을 가능하게 하는 일종의 우회방법이다. - 다양한 IPC 기법이 존재하지만, 가장 많이 사용하고 있는 signal과 socket이 있다. - 사 devraphy.tistory.com - 하지만, 이 시그널을 단순히 IPC기법 중 하나로 설명하기에는 그 역할이 너무 방대하다. - 그러므로 시그널에 대해서 알아보자. 1. 시그널(.. 2021. 9. 21.
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.
26. 프로세스 - IPC 기법(pipe, message queue) 0. 시작하기전에 - 운영체제에서 배운 IPC 기법을 간단하게 복습해보자. 1. IPC 기법이란 - IPC 기법은 프로세스 간의 통신을 위한 기술이다. - 프로세스 교체 등의 이유로 한 프로세스에서 다른 프로세스의 상태를 확인해야 하는데, - 보안상의 이유로 프로세스는 다른 프로세스의 데이터에 접근할 수 없고, 프로세스 간의 통신은 불가능하다. - 그러므로 일종의 우회 방식으로 프로세스간의 통신을 가능하게 하는 기술이 IPC 기법이다. 2. IPC 기법의 종류 a) File 기법 - 프로세스는 저장매체에 접근이 가능하므로, 각 프로세스의 상태를 기록하는 공유 파일을 통해 통신하는 방식이다. - 저장매체에 접근하는데 시간이 오래걸리며, 공유 파일이 업데이트 되더라도 다른 파일은 이를 알 수 있는 방법이 없.. 2021. 9. 17.
25. 프로세스 - 우선순위 스케줄링 시스템 콜 0. 시작하기전에 - 이번 포스팅에서는 프로세스 스케줄링과 관련된 시스템 콜에 대해서 배울 예정이다. 1. 우선순위 기반 스케줄러 (priority based) - 우선순위를 기반으로 프로세스의 실행순서를 정하는 스케줄링 방식이다. a) 리눅스는 우선순위에 크게 영향을 받지 않는다. - 리눅스는 우선순위에 크게 영향을 받는 스케줄링 방식을 사용하지 않는다. - 당연히, 우선순위를 확인하고 이에 따라 실행되도록 하는 시스템 콜이 존재하지만, b) 그렇다면 왜 리눅스는 우선순위 기반의 스케줄링을 지원하는가? - 리눅스 운영체제 자체가 우선순위에 크게 중점을 두지 않은 방식으로 스케줄링을 하도록 설계되어있다. - 그렇다면 왜 우선순위 스케줄링의 시스템 콜을 제공할까? 이는 POSIX 규격으로 운영체제를 표준화.. 2021. 9. 17.
24. 프로세스 - 프로세스 생성과 종료 총정리 0. 시작하기전에 - 이번 포스팅에서는 이전까지 배운 프로세스 관련 시스템 콜에 대해서 총정리를 할 예정이다. - 추가적으로 wait() 시스템 콜에 대해서 깊이있게 다뤄볼 것이다. 1. 프로세스 생성부터 종료까지 - 아래의 그림을 통해서 전체적인 프로세스 생성 및 종료 과정을 복습해보자. a) 새로운 프로세스를 생성하는 방법 - fork() 시스템 콜을 이용하여 기존의 프로세스를 복사하는 방식으로 새로운 프로세스를 생성한다. - 복사의 대상이 되는 기존 프로세스를 부모 프로세스라고 부른다. - 복사를 통해 새로 생성된 프로세스를 자식 프로세스라고 부른다. - 이를 통해, 프로세스 간의 계층이 형성된다. - fork() 시스템 콜은 PID 값을 반환하는데, 이를 통해서 부모와 자식 프로세스를 구분할 수 .. 2021. 9. 17.
23. 프로세스 - 프로세스 종료(exit) 1. exit() 시스템 콜 - exit()은 프로세스를 종료할 때 사용하는 시스템 콜이다. a) exit()의 원형 #include void exit(int status); - exit() 시스템 콜은 stdlib 라는 기본 라이브러리에 속해있는 함수다. - exit()의 인자(parameter)는 상태를 나타내는 정수를 입력한다. b) exit() 함수를 사용하는 이유 - exit() 함수는 프로세스의 수행과정에서 비정상적인 종료가 필요한 경우에 사용한다. - C언어 코딩을 하다보면 exit(0)함수 보다 return 0;을 입력하는 경우가 많다. - 그렇다면 return 0과 exit(0)함수의 차이는 무엇일까? c) return 0 와 exit(0)의 차이점 - main함수 내부에서의 exit(0.. 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.
21. 프로세스 - wait & 쉘 만들기 0. 시작하기전에 - 이전에 배운 fork()와 exec()에 대해서 간략하게 복습해보자. ▶ fork() - 기존의 프로세스를 복사하여 새로운 프로세스를 생성한다. - 기존의 프로세스를 부모 프로세스, 새로 생성된 프로세스를 자식 프로세스라고 한다. - 이로 인해서, 프로세스간의 계층이 생성된다. ▶ exec() - 기존의 프로세스를 재활용하는 방식으로 새로운 프로세스를 만든다. - 기존 프로세스의 Text, BSS, Data 메모리를 새로운 코드이미지로 덮어 씌워 새로운 프로세스를 생성한다. - 여기서 한가지 의문점이 생길 수 있다. 왜 프로세스를 만드는 방식을 fork()와 exec(), 두가지가 필요할까? 1. 리눅스의 프로세스 생성 방식 - fork()를 사용하든, exec()를 사용하든 리눅스.. 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.