Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Linux userspace, kernel space #11

Open
iamminji opened this issue Jul 24, 2022 · 0 comments
Open

Linux userspace, kernel space #11

iamminji opened this issue Jul 24, 2022 · 0 comments
Labels
linux 리눅스

Comments

@iamminji
Copy link
Owner

iamminji commented Jul 24, 2022

리눅스 공부

pid

  • 0 swapper
  • 1 init
  • 2 kthreadd

유저 모드에서는 init process 가 부모 프로세스이고 커널 모드에서는 kthreadd (커널 스레드 데몬) 가 부모 프로세스가 된다. swapper 는 여기 참고

Thread

image

쓰레드는 운영체제 레벨에서 커널 쓰레드와 유저 레벨 쓰레드로 나누어진다. 유저 레벨 쓰레드는 커널 쓰레드 하나가 여러개의 쓰레드를 실행시킨다고 볼 수 있다. (하나의 프로세스가 여러 쓰레드를 관리하는 것 처럼)

  • 유저 레벨 쓰레드는 말 처럼 유저 라이브러리에 의해 생성되는 것이기 때문에 시스템 콜과 같은 것이 없다.
  • 커널 쓰레드는 말 그대로 커널 레벨 단위이며 운영체제가 관리하는 쓰레드로 시스템 콜이 일어난다. (유저 모드 -> 커널 모드시 시스템 콜 사용)

lock

세마포어 semaphore

세마포어의 종류는 3가지이다.

  • 카운팅 세마포어
  • 이진 세마포어 (카운팅이 1인 세마포어라고 생각하면 된다.)
  • 뮤텍스

세마포어와 뮤텍스의 차이

세마포어와 뮤텍스의 차이점은 순서 보장권과 소유권의 유뮤에 있다. 가장 중요한 점은 세마포어는 상호 배제의 메커니즘을 동기화로 가능하게 하고, 뮤텍스는 상호 배제로서 독점적인 자원에만 초점을 맞춘 메커니즘이다. (흔히들 뮤텍스를 퍼밋이 하나 뿐인 세마포어/이진 세마포어라고 표현하기도 한다.)

순서 보장

세마포어는 한정된 자원을 순서대로 서비스하는 동기화에 목적이 있고, 뮤텍스는 공유 자원의 독점적 사용을 목적으로 한다. 따라서 뮤텍스는 순서가 중요하지 않는다.

소유권

두번 째로는 소유권의 개념은 뮤텍스에는 있고 세마포어에는 없다.

뮤텍스는 잠금을 건 쓰레드가 소유권을 가지고 있으며, 이 쓰레드에서 풀어주지 않으면 다른 쓰레드는 unlock 할 수 없다.

그러나 세마포어는 자원을 획득한 프로세스가 쓰레드가 반납하기 전에 다른 프로세스나 쓰레드가 반납을 할 수 있다. (다만 대기열의 순서 보장권만 있을 뿐이다.)

예를 들어 은행에서 창구가 5개라고 했을 때 100번째 손님이 5번 창구에 있는데 1번 창구가 비어지게 된다면, 101번째 손님은 100번째 손님이 끝나기를 기다리지 않고 1번 창구로 갈 수 있다.

이러한 점 때문에 뮤텍스가 세마포어보다 가볍다. (대기열이 필요가 없으므로) 그래서 뮤텍스가 더 많이 쓰이긴 한다. 다만, (트랜잭션 같이 순서대로 일어나야 하는 경우) 세마포어로 가능한 동기화 작업은 뮤텍스를 대신할 수 없다.

@iamminji iamminji added the linux 리눅스 label Jul 24, 2022
@iamminji iamminji changed the title Linux 이모저모 Linux userspace, kernel space Aug 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
linux 리눅스
Projects
None yet
Development

No branches or pull requests

1 participant