분류 전체보기 (117) 썸네일형 리스트형 유저 스택과 커널 스택 출처: https://kldp.org/node/73308 커널 스택이 궁금합니다. | KLDP 리눅스 커널 스택에 대해서 궁금합니다. 1.커널 스택은 프로세스마다 하나씩 생성되는 건가요 ? 2.커널 스택에는 어떤 정보가 들어가게 되나요 ? (얼핏 알기로는 해당 프로세스에 인터럽트가 걸 kldp.org 질문 1. 커널 스택은 프로세스마다 하나씩 생성되는가? 2. 커널 스택에는 어떤 정보가 들어가는가 3. 프로세스 하나는 4기가의 가상공간을 사용한다고 들었다. 이 중에서 0~3이 응용프로그램이고 3~4기가는 커널이 사용하는 공간인데 어떤 연관성이 있나?? 답변: 1. 커널 스택은 프로세스마다 하나씩 생성됩니다. 일반적인 프로세스는 User Mode 스택과 Kernel Mode 스택을 각각 하나씩 가지고 있습.. Pintos project 1 Alarm clock, priority scheduling project 1 Threads는 크게 2가지를 개선하는 방식으로 진행되는데 우선 alarm clock을 먼저 이야기하겠다 기존의 Alarm clock(sleep)은 스레드가 일어날 때까지 busy waiting으로 대기하면서 언제 깨울지를 기다린다. 밑의 코드처럼 시간이 될 때까지 계속 깨워서 확인하게 된다. 우리는 이걸 주어진 시간만큼 스레드를 재웠다가 다시 깨울 것이다. 그러기 위해서는 몇 가지 상태에 대해 알아야 되는데 위에서 말한 것처럼 스레드가 돌고 있는 상태를 running, 우리가 스레드를 잠재우면 blocked 된다고 말한다. 이걸 다시 깨워서 ready 큐에 넣는데 이걸 대기 상태라 볼 수 있다. 따라서 우리는 block 시켜서 잠재울 애들을 따로 관리하는 sleep list를 추가해 .. CPU 가상화 CPU를 가상화한다는 건 쉽게 말해서 여러 작업들이 동시에 실행되는 것처럼 보이도록 cpu 공유하게 함. 기본적인 아이디어는 돌아가면서 CPU 시간 나눠 쓰면 되는 거다. 여기서 2가지 문제가 발생 성능 저하랑 , 제어 문제 제어권을 상실하게 되면 한 프로세스가 영원히 실행권을 가질 수가 있다. 그래서 제한적 직접 실행(LDE) 이라는 기법이 있다. 말 그대로 cpu상에서 그냥 실행하는 거임 근데 여기서 문제 한 프로그램이 운영체제가 원치 않는 일을 하지 않는다는 보장이 있나, 그리고 운영체제가 어떻게 알고 원래 프로그램 중단하고 다른 프로세스로 바뀌는가. 자 그럼 해결해보자 일단 제한된 연산이라는 것은 커널 모드랑 유저 레벨 모드를 두어서 커널 모드에서 특수한 명령어만 실행하게 함. 여기서 시스템 콜들.. 커널 레벨 쓰레드와 유저 레벨 쓰레드 먼저 간단하게 스레드의 개념과 커널 레벨 스레드, 유저 레벨 스레드를 살피고 가자 스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다. 사용자 레벨 스레드 (User-Level Thread) 사용자 스레드는 커널 영역의 상위에서 지원되며 일반적으로 사용자 레벨의 라이브러리를 통해 구현되며, 라이브러리는 스레드의 생성 및 스케줄링 등에 관한 관리 기능을 제공한다. 동일한 메모리 영역에서 스레드가 생성 및 관리되므로 속도가 빠른 장점이 있는 반면, 여러 개의 사용자 스레드 중.. 프로시저 프로시저 호출은 소프트웨어에서 중요한 추상화이다. 이들은 지정된 인자들과 리턴 값으로 특정 기능을 구현하는 코드를 감싸주는 방법을 제공한다. 프로시저에 대한 기계어수준 지원을 제공할 때 처리되어야 하는 여러 가지 많은 특성들이 존재한다. 프로시저 P가 프로시저 Q를 호출하고, Q가 실행한 후에 다시 P로 리턴한다고 가정하자. 이러한 동작들은 다음과 같은 하나 이상의 메커니즘이 연관된다 제어권 전달: PC(프로그램 카운터) 는 진입 할 때 Q에 대한 코드의 시작주소로 설정되고, 리턴할 때는 P에서 Q를 호출하는 명령어 다음의 명령어로 설정되어야 한다. 데이터 전달: P는 하나 이상의 매개변수를 Q에 제공할 수 있어야 하며, Q는 다시 P로 하나의 값을 리턴할 수 있어야 함. 메모리 할당과 반납: Q는 시작.. 전통적 동기화 문제와 데드락 데드락은 동시성 이슈에서 다루는 게 좋을 것 같았지만, 예시와 함께 정리해보려고 한다. Produer-Consumer problem 소비자와 생산자가 유한한 버퍼를 갖는 상황에서 소비자와 생산자가 상호 배타적으로 접근하고, 소비자는 버퍼가 있으면 소비하고 , 생산자는 원소가 없으면 원소를 생성해야 한다. 위의 문제를 해결하려는 조건은 생산자가 우선 실행된 적이 있어야 하고, 생산자의 실행 횟수가 소비자보다 많아야 한다. 이를 해결하기 위해서 3가지 세마포를 사용한다 mutex라는 생산자 소비자 상호 배제를 위한 세마포 slots이라는 비어있는 버퍼의 개수를 나타내는 세마포 items라는 버퍼에 차있는 개수를 나타내는 세마포 여기서 주의할 점은 다음과 같이 코드를 작성해 버리면 데드락에 걸릴 수가 있다. .. 동시성 이슈 동기화는 근본적으로 어려운 문제라고 한다. 어떤 종류의 동시성 흐름이 공유 자원을 조작할 때 발생하는 일반적인 이슈들을 정리해 보자. 스레드 안전 (Thread safety) 쓰레드로 프로그래밍할 때, 스레드 안전성이라고 부르는 특성을 가지는 함수를 작성하도록 유의해야 함. 다수의 동시성 스레드로부터 반복적으로 호출될 때 항상 정확한 결과를 만드는 경우에만 스레드-안전이라고 한다. 병렬 프로그램에서는 단순히 lock만 신경 쓴다고 해결되지 않는 다고 한다. 만일 어떠한 함수가 스레드 안전하지 않다면 이것은 thread-unsafe라 한다. 스레드-위험한 함수의 네 가지 클래스를 다음과 같이 식별할 수 있다. 클래스 1: 공유 변수를 보호하지 않는 함수들 예를 들어 보호되지 않는 전역 변수를 증가시키는 경.. asm (생각나는 대로 정리중) ZF, CF 등 여러 상태가 있는데 ZF는 연산 결과가 0이면 1이고 0이 아니면 0이 된다. CF는 연산 시 비트 올림이나, 비트 내림 발생 시 CF가 1로 set 됨 cmp는 두 operand의 차를 사용해서 비교하는 명령어 연산 결과는 저장 안 됨 차가 0이 되면 ZF가 1로 set 됨 test 명령어는 두 operand AND연산하는 거임 그래서 0인지 판별할 때 많이 함 똑같이 0이면 ZF가 1로 세팅됨 cmp는 두 operand가 완전히 같은지 판단할 수 있고 test는 두 operand가 모두 0인지 판단할 수 있다. test의 경우에는 두 operand가 0이 아닌 경우를 제외하고는 값을 단정 지을 수 없기 때문에 test eax eax 같은 형태로 사용하여 값이 0이 아닌지 파악할 때 씀.. 이전 1 ··· 8 9 10 11 12 13 14 15 다음