1. 리눅스 OS의 역할

1. 기능

  • 격리(Isolation)
  • 하드웨어 추상화
  • 다중화(Multiplex)
  • 공유(Sharing)
  • 보안(Security)
  • 성능(Performance)

2. SW 복잡성 해결

  • 모듈화
  • 추상화
  • 레이어링
  • 계층화(Hierachial)

2. 프로세스

1. CPU 격리(isolation)

1. 격리 방법

  • H/W 주기적으로 "clock interrupt"를 제공
  1. 강제적으로 현재 프로세스를 중단
  2. 커널로 진입
  3. 커널은 다른 프로세스로 변경

2. 격리 이유

  • 긴 연산을 하는 프로세스를 막기 위해
  • 무한 루프 코드 방지

3. 커널은 반드시 실행중이였던 프로세스의 상태(register)를 저장/복구 할 수 있어야 함

  • 문맥 교환을 통해 달성(context switch)

2. 메모리 격리

  • 커널 또는 다른 프로세스가 접근하는 것을 방지

1. 주소 공간

  • code
  • variables
  • heap
  • stack

2. 격리 방법

  • 페이징 하드웨어(MMU: Memory management unit)를 통해 격리

2. 스레드란?

  • CPU 코어에서 실제로 실행되는 코드
  • 1개의 프로세스는 적어도 1개 이상(main 스레드+ ...) 의 스레드를 가짐
  • 실행되지 않은 스레드는 스택 공간에 레지스터에 저장
  • 스레드 간에는 메모리를 공유
    -> 프로세스의 주소 공간을 공유

1. 프로세스와 스레드의 차이점

1. 프로세스

  • 독립적인 주소 공간 + 여러 스레드
    -> 독립적인 주소 공간은 page tables를 통해 관리

2. 스레드

  • 독립적으로 실행
    -> 레지스터, PC(program counter), 스택
    -> 일반적으로 CPU 보다 많은 스레드들이 동작

2. 스레드 스위칭 과정

  1. user -> kernel
    -> 시스템 콜 호출 또는 타이머 인터럽트
  2. kernel -> schedular
  3. schedular가 사용 가능한 스레드 탐색
  4. schedular -> kernel
  5. kernel -> user

3. 프로세스의 메모리 맵

sudo cat /proc/<pid>/maps

4. 스레드 사용 방법

1. 스레드 생성

2. 스레드 종료

3. 종료된 스레드 조인

4. thread Detaching

  • 생성된 스레드가 그냥 종료 된다면 메모리 공간에 남음
  • detach로 스레드를 설정하면 스레드 종료시 알아서 메모리 정리
  • 스레드가 별개로 작동하길 원할 때 사용
  • pthread_detach(pthread_self());
profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글

Powered by GraphCDN, the GraphQL CDN