본문 바로가기

전체 글107

스레드 Thread 프로세스 내부에서 CPU를 수행하는 단위 왜 필요할까? 프로세스마다 주소공간에 code, data, stack이 있고, 프로세스 하나를 관리하기 위해 운영체제 내부에 PCB가 있다. 이는 프로세스의 상태와 ID, program counter(메모리의 어느부분을 가리키고 있는가) 등을 저장하고 있다. 만약 동일한 일을 하는 프로세스가 여러개라면 프로세스마다 별도의 메모리 주소 공간을 가져야하므로 메모리가 낭비된다. 이때, 프로세스를 하나만 띄워놓고 하나의 code, data, stack영역을 공유한다면 메모리를 아낄 수 있을 것이다. 이것이 스레드를 사용하는 이유이다. 작동 원리 하나의 프로세스에 CPU의 실행 단위를 여러개를 두어 스레드 별로 CPU가 code의 어느부분을 실행하고 있는지 별.. 2023. 10. 27.
프로세스 프로세스 실행 중인 프로그램을 의미 사용자 영역 stack - 함수에 대한 파라미터, 리턴 주소, 지역 변수 heap - 동적할당으로 생성한 메모리 변수 data - 전역 변수 (초기화 된 변수 영역 / 초기화 되지 않은 변수 영역) code - 프로그램 코드 커널 영역 Context CPU 현재 상태를 나타내기 위해 사용 특정 시점에서 프로세스가 코드의 어디까지 실행했는지 알기 위해 필요 프로세스의 상태 New 프로세스 생성 중인 상태 Ready 모든 준비가 되어있고, CPU만 얻으면 명령을 실행할 수 있는 상태 따라서 최소한의 메모리는 갖고 있어야함 일반적으로 Ready상태에 있는 프로세스가 CPU를 잡았다 놨다 하면서 번갈아서 작업을 함 Waiting CPU가 있어도 바로 명령을 실행할 수 없는 상.. 2023. 10. 27.
Compose 이해 명령형 UI vs 선언형 UI 명령형 UI 지금까지 Android 뷰 계층 구조는 UI위젯의 트리로서 나타냈다. 사용자의 상호작용으로 앱의 상태가 변경되면, 현재 데이터를 표시하기 위해 UI계층을 업데이트 해야한다. 데이터가 변경되면 findViewById()로 뷰를 탐색하고, button.setText(String), container.addChild(View) 또는 img.setImageBitmap(Bitmap)과 같은 메서드를 호출하여 UI 내부 상태를 바꾸어 업데이트 해야하는 것이다. 이런 방식으로 뷰를 수동으로 업데이트하면 오류가 발생할 가능성이 커지고, 앱을 유지 관리하는 것이 복잡해진다. 선언형 UI 처음부터 화면 전체를 개념적으로 재생성한 후 필요한 변경사항만 적용하는 방식으로 작동한다. .. 2023. 10. 26.
프로그램의 실행 프로그램의 실행 파일시스템에 실행 파일이 존재한다. 가상 메모리에 각 프로그램의 독자적인 주소 공간이 생성된다. 주소 공간은 stack, data, code영역으로 이루어져 있다. 주소 공간 중 필요한 부분만 메모리에 올라간다. 사용하지 않는 영역은 Swap area으로 배제해둔다. 메모리의 구성 User 영역 실행 할 프로그램의 주소공간이 존재. 프로그램이 종료되면 해당 프로그램이 사용하던 주소 공간은 사라진다. Kernel 영역 code 시스템 콜, 인터럽트 처리 코드 자원 관리를 위한 코드 data 운영체제가 사용하는 자료구조 프로세스와 하드웨어 별로 자료구조를 관리한다. stack 함수 호출 및 리턴을 위한 스택 💡 프로그램은 유저 영역과 커널 영역을 반복하며 실행되는데, 유저 영역에서 커널 영역.. 2023. 10. 26.