- 격리(Isolation)
- 하드웨어 추상화
- 다중화(Multiplex)
- 공유(Sharing)
- 보안(Security)
- 성능(Performance)
- 모듈화
- 추상화
- 레이어링
- 계층화(Hierachial)
- H/W 주기적으로 "clock interrupt"를 제공
- 강제적으로 현재 프로세스를 중단
- 커널로 진입
- 커널은 다른 프로세스로 변경
- 긴 연산을 하는 프로세스를 막기 위해
- 무한 루프 코드 방지
- 문맥 교환을 통해 달성(context switch)
- 커널 또는 다른 프로세스가 접근하는 것을 방지
- code
- variables
- heap
- stack
- 페이징 하드웨어(MMU: Memory management unit)를 통해 격리
- CPU 코어에서 실제로 실행되는 코드
- 1개의 프로세스는 적어도 1개 이상(main 스레드+ ...) 의 스레드를 가짐
- 실행되지 않은 스레드는 스택 공간에 레지스터에 저장
- 스레드 간에는 메모리를 공유
-> 프로세스의 주소 공간을 공유
- 독립적인 주소 공간 + 여러 스레드
-> 독립적인 주소 공간은 page tables를 통해 관리
- 독립적으로 실행
-> 레지스터, PC(program counter), 스택
-> 일반적으로 CPU 보다 많은 스레드들이 동작
- user -> kernel
-> 시스템 콜 호출 또는 타이머 인터럽트- kernel -> schedular
- schedular가 사용 가능한 스레드 탐색
- schedular -> kernel
- kernel -> user
sudo cat /proc/<pid>/maps
- 생성된 스레드가 그냥 종료 된다면 메모리 공간에 남음
- detach로 스레드를 설정하면 스레드 종료시 알아서 메모리 정리
- 스레드가 별개로 작동하길 원할 때 사용
- pthread_detach(pthread_self());