본문 바로가기
SW사관학교 정글 4기/pintos

Project 2: User Programs 검색어 목록

by g0n1 2022. 5. 30.
728x90

1. User mode vs. Kernel mode

  • User mode는 해당 user program의 private한 저장공간(virtual memory)에만 접근할 수 있고, I/O작업을 수행하는 것이 불가능하다.
  • 그에 반해, Kernel은 메모리의 어떤 공간이든 접근할 수 있고 어떤 I/O작업도 가능하다.
  • 유저모드와 커널모드의 구별을 위해 Mode-bit을 사용해 0, 1을 각각 kernel mode, user mode로 구분한다.
  • 가상주소공간: kernel은 단 하나의 가상주소공간을 갖지만, 사용자 프로그램은 분리된 주소공간을 갖는다.

2. Process

  • 프로세스는 자원의 할당 단위이다.
  • 각 프로세스는 고립된 가상 메모리를 할당 받고, 프로세스 간에는 다른 가상메모리 공간에 접근할 수 없다.(protection)
  • 프로세스 간에 통신을 할 수 있기는 한데 비용이 비싸다.
  • 프로세스는 하나 이상의 스레드를 가질 수 있다.
  • 스레드: 프로세스의 작업 흐름 단위, 스레드는 하나의 프로세스 안에서 다른 스레드와 스택을 제외한 데이터를 공유하기 때문에 light-weight process라고 부르기도 한다.
  • 프로그램의 인스턴스(특정 모델을 바탕으로 생성된 새로운 context)이다.
  • Created, Running, Waiting, Blocked, Terminated 등의 상태를 갖는다.

Process Environment block (PEB)

  • Windows NT 운영체제군에서 사용되는 데이터 구조이다.
  • 구조체의 필드들은 유저가 사용하라고 만든 건 아니고 운영체제가 쓰라고 만들어둔 것이다.
  • (윈도우에서만 쓰는 게 아닌가? 다른 의미가 있나?)

Process identifier(PID, process ID)

  • 운영체제 커널이 active process을 구별하기 위해 붙인 고유한 식별자(숫자)이다.
  • 다양한 함수의 파라미터로도 쓰이고, 파라미터를 조작할 때도 사용된다.(우선순위 조작, 프로세스 kill)
  • PID 1은 보통 시스템을 시작하고 끄는 init process가 갖는다.

+ 추가 : PCB(Process Control Block)

https://g0n1.tistory.com/222

 


 

3. User stack &  Kernel stack

  • 둘 다 call stack으로서의 역할을 한다.

User space & Kernel space

  • 현대 시스템에서는 memory에 대한 주소를 직접 사용하지 않고 가상주소를 사용한다.
  • 가상 메모리와 물리 메모리는 여러개의 덩어리로 잘려서 관리하는데, 이 덩어리를 page라고 한다.
  • page로 메모리를 관리하는 덕분에 메모리 관리의 복잡성이 완화되고, 프로세스 별로 독립된 주소공간을 사용하게 하여 안전해졌다. 그 외에도 demand-paging, swap-space 덕에 공간을 효율적으로 사용할 수 있다.
  • 가상주소공간은 user space와 kernel space로 나눌 수 있는데 kernel space는 항상 높은 주소 공간에 존재한다.
  • 주소 매핑은 항상 0xffff800000000000부터 시작한다.
  • 만일 사용자 프로그램이 제한된 서비스(I/O등)를 요청하려는 경우, system calls를 사용한다.

User stakcs & Kernel stacks

  • 모든 user process는 user stack과 kernel stack을 갖는다.
  • user proecss가 privileged instruction을 실행시키려고 하면 trap을 발동시켜 kernel mode로 들어가게 되고, kernel은 user process를 대신해서 이것(privileged instruction)을 수행하는데, 이 수행이 kernel stack에서 일어난다.
  • user stack은 user mode에서 실행되고 있는 경우에만 사용된다.
  • kernel stack은 kernel space안에 있어서 user process가 직접 접근하는 것이 불가능하다.
  • user process가 system call을 사용하면 kernel mode가 됨에 따라 실행중인 프로세스의 kernel stack이 사용된다.
  • kernel stack은 각 스레드의 thread_info 구조체를 저장하기 위해 사용된다.

 

  • kernel stack에서 system call을 수행할 때, segment selector와 stack pointer를 TSS에 저장된다.
    segment: IPC(Interprocess Communication)에 사용되는 shared memory
    segement selector:
  • system call을 할 때, user process는 caller save register를 모두 저장해놓고 `int $0x80`을 수행한다.
  • HW는 TSS에서 프로세스의 커널 스택 주소를 찾고, 이 값들을 %ss(stack segment)에 load한 뒤, old stack stack-pointer (%esp), old program-counter (%eip), old stack segment (%ss), code segment(%cs), and EFLAGS registers 들을 커널 스택에 저장한다.
  • 시스템 콜이 끝나면 위에서 push했던 값들을 다시 pop해서 resotre 한다.

 

 

https://stackoverflow.com/questions/12911841/kernel-stack-and-user-space-stack

 

kernel stack and user space stack

What's the difference between kernel stack and user stack? Why kernel stack is used? If a local variable is declared in an ISR, where it will be stored? Does each process has its own kernel stack? ...

stackoverflow.com

https://www.quora.com/What-is-a-processes-kernel-stack-What-exactly-is-its-use-besides-keeping-the-thread_info

 

What is a processes' kernel stack? What exactly is its use besides keeping the thread_info?

Answer (1 of 3): In a Linux system, every user process has 2 stacks, a user stack and a dedicated kernel stack for the process. The user stack resides in the user address space (first 3GB in 32-bit x86 arch.) and the kernel stack resides in the kernel addr

www.quora.com

https://stackoverflow.com/questions/9876323/storing-and-retrieving-process-control-block

 

Storing and retrieving process control block

When a process is in execution, the contents of the PCB (which is in kernel memory space?) are loaded onto the CPU registers, and status registers, kernel stack pointers, user stack pointers, etc. ...

stackoverflow.com

 

728x90

댓글