ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로세스
    카테고리 없음 2022. 12. 21. 23:14

    머리말.

    블로그를 다시 작성해보려 결심한지 달이 지나서 드디어 운을 있었다. 게시글을 시작으로 꾸준하게 작성해보려 한다.

    나는 운영체제를 제대로 체계적으로 공부해본 적이 없다. 구글 검색을 통해 익힌 지식과 이렇게 쌓여진 정보들이 정리가 되어있지 않다. 내가 갖고 있는 지식들이 체계적이지 않았는지 사수는 나에게 공룡책을 추천해주셨다. 공룡책은 아직 구매하지 않았지만.. 조만간 구매해서 읽어볼 예정이며, 내가 직접 머릿속에 있는 정보들을 끄집어 내어 글로 작성한 다음 체계적으로 만들어 봐야겠다.

     

     

     


     

    우선 운영체제 과목에서 많이 접해볼 있는 프로세스(process) 쓰레드(thread)에 대해서 정리해보자.

    •  프로세스(process)

    - OS 의해 Resource(메모리, 디스크 하드웨어 장치) 할당 받아서 Processor 의해 실행/제어 되고 있는 프로그램.

    - OS에 의해 스케줄링의 대상이 되는 작업(task) 같은 의미

    - OS의 Protection에 의해 프로세스는 별도의 메모리 주소 공간에서 실행되며, 특별하지 않는 다른 프로세서의 변수나 데이터에 접근하지 못하도록 되어있다.

    <선착순 프로세스 1명>

    윈도우를 사용하다 보면 다양한 에러메세지 중 위와 같은 메세지를 봤을 수도 있다. 

    이처럼 다른 프로세스가 이미 사용중인 파일에 접근하거나 메모리를 침범하지 못하도록 되어있다.

    프로그래머가 다른 프로세서의 변수나 데이터에 접근하도록 프로그램  경우가 특별한 경우만 사용가능하다.

    운영체제 내에서 실행되는 프로세스는 독립적 (independent) 이거나 협력적(cooperative)인 프로세스로 구분 할 수 있는데 위와 같은 경우는 독립적인 프로세스(independent process)라고 볼 수 있으며 시스템에서 실행 중인 다른 프로세스들에게 영향을 주거나 받지 않는다. 협력적인 프로세스(cooperative process)는 위와 반대로 다른 프로세스 들에게 영향을 주거나 받는다.

     

    시스템의 자원은 한정되어 있고, 같은 동작을 수행하는 모든 프로세스들이 각각 독립된 공간을 할당받게 된다면..비효율적이지 않을까..?

     

    우선 다른 프로세스들에게 영향을 받거나 주게 되므로서 얻는 이점 즉, 협력적인 프로세스의 장점에 대해 구분해보았다.

    1. 정보 공유 (Information Sharing) : 여러 사용자가 동일한 정보를 필요로 할 수 있다.
    2. 계산 가속화 (Computation speedup) : 특정 작업(Task)를 빠르게 실행하기 위해, 해당 작업을 부분작업 (Sub Task)으로 나누어 병렬로 실행할 수 있다.
    3. 모듈화 (Modularity) : 특정한 시스템 기능을 별도의 프로세스로 구분하여 모듈식 형태로 구성할 수 있다.
    4. 편의성 (Convenience) : 여러 사용자들이 동시에 많은 작업을 수행할 수 있다.

    단점으로는

    1. Context Switching 이 자주 일어나게 되면 오버헤드가 발생 성능저하가 일어날 수 있다.
    2. 데이터를 공유하기 위해 프로세스 간 통신을 구현해야 한다.

    앞서 특별하지 않는 한 다른 프로세서가 사용하는 데이터에 접근하지 못한다고 언급했다. 자, 그럼 특별한 경우라고 하면 어떤 것일까?

    • 프로세스 간 통신(Inter-Process Communication)

    프로세스들 사이에 서로 데이터를 주고받는 행위 또는 방법이나 경로를 뜻하며 각 프로세스는 독립적인 메모리 공간을 가지고 보호받고 있기 때문에 별도의 매커니즘이 필요하다.

    별도의 매커니즘. 이것을 규정하기 위해 프로세스간 통신 방법이 정해져 있다. 일반적으로 많이 언급되는 방법만 나열해 보겠다.

    1. File
      • 파일을 사용해서 데이터를 주고받는 방식이다. 주로 txt 파일이나 바이너리 파일의 데이터를 가지고 데이터를 주고 받지만 파일이 저장되기 전에는 데이터를 주고받을 수 없어 실시간으로 데이터를 전달하기 어렵다는 문제를 가지고 있다.
    2. 파이프 방식 (Pipe)
      • 프로세스 사이에 Pipe를 통해 데이터를 주고 받는 방식이다. 파이프는 단방향 통신만 가능하기 때문에 데이터를 주고받으려면 두개의 파이프가 필요하다.
    3. 공유 메모리 (Shared Memory) 
      • 특정 메모리 공간을 두 프로세스가 함께 사용하며 정보를 주고받는다. 하지만 동시에 같은 메모리 주소를 접근하는 문제가 발생할 수 있다. 화장실 1칸을 두 명이 쓸 순 없지않은가..
    4. 메세지 전달 방식(Message Passing)
      • 메세지 전달 방식은 데이터를 공유할 필요가 있을 경우에 커널을 통해 메세지를 전달하는 방식이다.
    5. 소켓 (Socket)
      • 네트워크 소켓통신을 사용한 데이터 공유 방법이다.
    6. 시그널 (Signal)
      • 전통적으로 Unix에서 사용한 기법이다. 프로세스 코드에 시그널 핸들러를 등록하여, 해당 시그널을 처리하는 방식으로 동작하는데 운영체제에 미리 정의되어 있는 시그널만 사용 가능하다.

     


    정리

    독립적인 프로세스들은 이기적(?)인 프로세스 들이라 타 프로세스들과 정보를 공유하지 않는다.

    협력적인 프로세스들은 나서기를 좋아하지만 까다로운 녀석들이다.

     


    Reference

    https://parksb.github.io/article/7.html

    https://velog.io/@redgem92/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-IPC-%EA%B8%B0%EB%B2%95

    https://y-oni.tistory.com/77

    댓글

Designed by Tistory.