커널 모드 vs 유저 모드

Run·2021년 10월 4일
0

프로그램이란 OS + Application이다.

프로세스를 생성하면 32비트 기준 4GB 메모리를 할당 받는다.
이 중 절반은 OS가 절반은 app이 사용된다.
우리가 짜는 코드는 용량이 얼마 되지 않음.
대부분 실행을 시키기 위해 사용됨.

유저 영역과 커널 영역에 유저가 짠 코드와 커널 코드가 각각 매핑이 되면서 주소가 할당이 되면서 실행된다.

커널 영역 유저 영역 모두 0부터 4G-1까지 리니어하게 연결되어 있다.
그래서 유저모드에서 실수로 커널모드로 들어오면 커널코드가 바뀔 수가 있음.
이런 실수를 방지하기 위해
커널 모드와 유저 모드를 만듬

커널이 실행될 때는 커널모드로 들어와서 메모리 어느 곳이든 갈 수 있게 해준다.
하지만 유저의 프로그램이 실행될 때는 커널 영역으로 들어갈 수 있는 접근을 제한한다.

커널은 스케줄러가 동작할 때나 프로세스를 생성하거나 작동한다.

커널에서 쓰레드를 관리하면 쓰레드 컨텍스트 쉬위칭을 할 때마다 커널모드로 들어와야하기 때문에 커널 영역에서가 아닌 프로세스에서 쓰레드를 관리할 때보다 시간이 오래 걸린다.

요약:
커널 레벨 쓰레드의 장단점
장점: 커널에서 직접 제공해 주기 때문에 안정성과 다양한 기능성 제공
단점: 유저 모드에서 커널 모드로의 전환이 빈번

유저 레벨 쓰레드의 장점 및 단점
장점: 유저 모드에서 커널 모드로의 전환이 필요 없다.
단점: 프로세스 단위 블로킹(프로세스 안의 스레드 하나가 문제가 발생(블로킹 상태가 되면)하면 그 프로세스 안의 모든 쓰레드가 블로킹되는 것과 같이 된다.

profile
정글에서 살아남기

0개의 댓글