시스템 튜토리얼 리눅스 Linux 커널 일시정지/재개 프로세스의 구현 원리 및 관련 기술에 대한 심도 있는 논의

Linux 커널 일시정지/재개 프로세스의 구현 원리 및 관련 기술에 대한 심도 있는 논의

Feb 13, 2024 pm 03:45 PM
linux 리눅스 튜토리얼 리눅스 시스템 리눅스 명령 쉘 스크립트 임베디드리눅스 리눅스 시작하기 리눅스 학습

리눅스 커널에서 일시정지/재개 프로세스는 매우 중요한 프로세스입니다. 시스템 절전 및 깨우기를 실현하고 시스템의 에너지 효율성과 응답 속도를 향상시킬 수 있습니다. 이번 글에서는 리눅스 커널 일시정지/재개 프로세스의 구현 원리와 관련 기술을 살펴보겠습니다.

深入探讨Linux Kernel suspend/resume 过程的实现原理和相关技术

Hibernation/wakeup은 임베디드 Linux에서 매우 중요한 부분입니다. 임베디드 장치는 배터리 수명을 연장하기 위해 최대한 절전 상태로 들어가야 합니다. 이 글에서는 Linux에서 절전/깨우기 작동 방식을 자세히 소개합니다.

참고기사: 저자: zhangjiejing

날짜: 2010-04-07, http://www.thinksrc.com

내 리눅스 커널 버전: 3.0.31

최대 절전 모드에 대한 간략한 소개

Linux에서 최대 절전 모드는 주로 세 가지 주요 단계로 나뉩니다.

1. 사용자 모드 프로세스 및 커널 모드 작업을 중지합니다

2. 등록된 기기의 정지 콜백 기능을 호출합니다

3. 순서는 등록순입니다

핵심 장치를 최대 절전 모드로 전환하고 CPU를 최대 절전 모드로 전환합니다. 프로세스를 동결한다는 것은 커널이 프로세스 목록에 있는 모든 프로세스의 상태를 중지됨으로 설정하고 모든 프로세스의 컨텍스트를 저장한다는 의미입니다. 정지되면 계속 실행됩니다. Linux를 최대 절전 모드로 전환하는 방법은 무엇입니까? 사용자는 sys 파일을 읽고 쓰면서 시스템을 제어할 수 있습니다.

# echo mem > /sys/power/state

시스템에 절전 모드로 전환하도록 명령하는 것도 가능합니다.

# 고양이 /sys/power/state

커널에서 지원하는 절전 모드를 확인하려면

Linux 일시 중단 프로세스

관련 문서:

Linux 커널 웹사이트를 방문하여 소스 코드를 얻을 수 있습니다. 파일 경로는 다음과 같습니다.

으아아아

리눅스가 어떻게 잠자기/깨우기를 하는지 자세히 살펴보겠습니다.

사용자가 /sys/power/state를 읽고 쓰면 main.c에서 state_store()가 호출됩니다. 사용자는 "mem", "standby"와 같이 const char * const pm_state[]에 정의된 문자열을 작성할 수 있습니다. 일반적으로 일시 중지 및 재개 버튼으로 제어됩니다

그런 다음 state_store()는 enter_state()를 호출하여 먼저 일부 상태 매개변수를 확인한 다음 파일 시스템을 동기화합니다.

으아아아

준비, 동결과정

suspens_prepare()에 들어간 후 출력 정보에 일시 중지할 가상 터미널을 할당한 다음 시스템이 일시 중지에 들어가고 싶다는 알림을 브로드캐스팅하고 사용자 모드 도우미 프로세스를 닫은 다음 suspens_freeze_processes()를 순서대로 호출하여 모든 것을 중지합니다. 프로세스. , 모든 프로세스의 현재 상태가 여기에 저장됩니다. 동결 상태 진입을 거부하는 프로세스가 있을 수 있습니다. 이러한 프로세스가 있으면 동결이 실패하고 모든 프로세스가 동결 해제됩니다.

방금 얼어붙었어요. 으아아아

주변기기를 절전 모드로 설정

이제 모든 프로세스(workqueue/kthread 포함)가 중지되었습니다. 커널 모드 문자는 중지 시 일부 세마포를 보유할 수 있으므로 이때 주변 장치의 세마포를 잠금 해제하면 Lock이 발생할 수 있으므로 잠글 때 매우 주의하세요. /unlocking은 주변기기의 suspens() 함수에 있습니다. 그리고 설계 시에는 일부 로그가 출력되지 않기 때문에 문제가 발생하면 디버그하기가 매우 어렵습니다.

그러면 커널은 여기에서 일부 메모리를 확보하려고 시도합니다.

마지막으로 모든 주변 장치를 절전 모드로 전환하기 위해 suspens_devices_and_enter()가 호출됩니다. 이 함수에서 플랫폼이 suspens_pos(일반적으로 보드 수준 정의에 정의 및 등록됨)를 등록하면 여기에서 suspens_ops->begin()이 호출됩니다. 그러면 drivers/base/power/main.c의 device_suspens()->dpm_suspens()가 호출되고 드라이버의 suspens() 콜백을 차례로 호출하여 모든 장치를 절전 모드로 전환합니다.

모든 장치가 절전 모드로 전환되면 suspens_ops->prepare()가 호출됩니다. 이 함수는 일반적으로 보드를 절전 모드로 전환하기 위한 몇 가지 준비 작업을 수행합니다. 다음으로 Linux에서는 멀티 코어 CPU에서 시작되지 않는 CPU가 전환됩니다. off. 댓글에서 볼 수 있듯이 다른 CPU로 인해 발생하는 경합 상태를 방지하기 위한 것입니다. 이제부터는 하나의 CPU만 실행됩니다.

suspens_ops는 보드 수준의 전원 관리 작업으로, 일반적으로 arch/xxx/mach-xxx/pm.c.

파일에 등록됩니다.

다음으로 suspens_enter()가 호출됩니다. 이 함수는 아치 irq를 닫고, device_power_down()을 호출하며, 이 함수는 일반적으로 시스템이 실제로 절전 모드에 들어갈 때 호출되는 마지막 함수입니다. 최종 확인이 성공하면 모든 시스템 장치와 버스를 절전 모드로 전환하고, 이때 CPU는 절전 상태로 전환됩니다. 코드 실행이 중지됩니다.

1. /** 
2.  \* suspend_devices_and_enter - suspend devices and enter the desired system 
3.  \*         sleep state. 
4.  \* @state:    state to enter 
5.  */ 
6. int suspend_devices_and_enter(suspend_state_t state) 
7. { 
8.   int error; 
9.  
10.   if (!suspend_ops) 
11. ​    return -ENOSYS; 
12.  
13.   trace_machine_suspend(state); 
14.   if (suspend_ops-**>**begin) { 
15. ​    error = suspend_ops-**>**begin(state); 
16. ​    if (error) 
17. ​      goto Close; 
18.   } 
19.   suspend_console(); 
20.   suspend_test_start(); 
21.   error = dpm_suspend_start(PMSG_SUSPEND); 
22.   if (error) { 
23. ​    printk(KERN_ERR "PM: Some devices failed to suspend\n"); 
24. ​    goto Recover_platform; 
25.   } 
26.   suspend_test_finish("suspend devices"); 
27.   if (suspend_test(TEST_DEVICES)) 
28. ​    goto Recover_platform; 
29.  
30.   error = suspend_enter(state); 
31.  
32.  Resume_devices: 
33.   suspend_test_start(); 
34.   dpm_resume_end(PMSG_RESUME); 
35.   suspend_test_finish("resume devices"); 
36.   resume_console(); 
37.  Close: 
38.   if (suspend_ops-**>**end) 
39. ​    suspend_ops-**>**end(); 
40.   trace_machine_suspend(PWR_EVENT_EXIT); 
41.   return error; 
42.  
43.  Recover_platform: 
44.   if (suspend_ops-**>**recover) 
45. ​    suspend_ops-**>**recover(); 
46.   goto Resume_devices; 
47. } 

RESUME
로그인 후 복사

如果在休眠中系统被中断或者其他事件唤醒, 接下来的代码就会开始执行, 这个 唤醒的顺序是和休眠的循序相反的,所以系统设备和总线会首先唤醒,使能系统中 断, 使能休眠时候停止掉的非启动CPU, 以及调用suspend_ops->finish(), 而且 在suspend_devices_and_enter()函数中也会继续唤醒每个设备,使能虚拟终端, 最后调用 suspend_ops->end().

在返回到enter_state()函数中的, 当 suspend_devices_and_enter() 返回以后, 外设已经唤醒了, 但是进程和任务都还是冻结状态, 这里会调用suspend_finish()来解冻这些进程和任务, 而且发出Notify来表示系统已经从suspend状态退出, 唤醒终端.

到这里, 所有的休眠和唤醒就已经完毕了, 系统继续运行了.

总之,suspend/resume过程是Linux内核中不可或缺的一部分。它可以实现系统的休眠和唤醒,提高系统的能效和响应速度。希望本文能够帮助读者更好地理解Linux Kernel suspend/resume 过程的实现原理和相关技术。

위 내용은 Linux 커널 일시정지/재개 프로세스의 구현 원리 및 관련 기술에 대한 심도 있는 논의의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Linux 터미널에서 Python 버전을 볼 때 발생하는 권한 문제를 해결하는 방법은 무엇입니까? Linux 터미널에서 Python 버전을 볼 때 발생하는 권한 문제를 해결하는 방법은 무엇입니까? Apr 01, 2025 pm 05:09 PM

Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

APSCHEDULER 타이밍 작업을 MACOS의 서비스로 구성하는 방법은 무엇입니까? APSCHEDULER 타이밍 작업을 MACOS의 서비스로 구성하는 방법은 무엇입니까? Apr 01, 2025 pm 06:09 PM

Apscheduler 타이밍 작업을 MacOS 플랫폼의 서비스로 구성하십시오. Ngin과 유사한 APSCHEDULER 타이밍 작업을 서비스로 구성하려면 ...

C 언어로 멀티 스레딩을 구현하는 4 가지 방법 C 언어로 멀티 스레딩을 구현하는 4 가지 방법 Apr 03, 2025 pm 03:00 PM

언어의 멀티 스레딩은 프로그램 효율성을 크게 향상시킬 수 있습니다. C 언어에서 멀티 스레딩을 구현하는 4 가지 주요 방법이 있습니다. 독립 프로세스 생성 : 여러 독립적으로 실행되는 프로세스 생성, 각 프로세스에는 자체 메모리 공간이 있습니다. 의사-다일리트 레딩 : 동일한 메모리 공간을 공유하고 교대로 실행하는 프로세스에서 여러 실행 스트림을 만듭니다. 멀티 스레드 라이브러리 : PTHREADS와 같은 멀티 스레드 라이브러리를 사용하여 스레드를 만들고 관리하여 풍부한 스레드 작동 기능을 제공합니다. COROUTINE : 작업을 작은 하위 작업으로 나누고 차례로 실행하는 가벼운 다중 스레드 구현.

Linux 시스템에서 Python 통역사를 삭제할 수 있습니까? Linux 시스템에서 Python 통역사를 삭제할 수 있습니까? Apr 02, 2025 am 07:00 AM

Linux 시스템과 함께 제공되는 Python 통역사를 제거하는 문제와 관련하여 많은 Linux 배포판이 설치 될 때 Python 통역사를 사전 설치하고 패키지 관리자를 사용하지 않습니다 ...

Web.xml을 열는 방법 Web.xml을 열는 방법 Apr 03, 2025 am 06:51 AM

Web.xml 파일을 열려면 다음 방법을 사용할 수 있습니다. 텍스트 편집기 (예 : 메모장 또는 문자 메시지)를 사용하여 통합 개발 환경 (예 : Eclipse 또는 NetBeans)을 사용하여 명령을 편집하십시오 (Windows : Notepad Web.xml; Mac/Linux : Open -A Texted web.xml).

가장 잘 사용되는 Linux는 무엇입니까? 가장 잘 사용되는 Linux는 무엇입니까? Apr 03, 2025 am 12:11 AM

Linux는 서버 관리, 임베디드 시스템 및 데스크탑 환경으로 사용되는 것이 가장 좋습니다. 1) 서버 관리에서 Linux는 웹 사이트, 데이터베이스 및 응용 프로그램을 호스팅하는 데 사용되어 안정성과 안정성을 제공합니다. 2) 임베디드 시스템에서 Linux는 유연성과 안정성으로 인해 스마트 홈 및 자동차 전자 시스템에서 널리 사용됩니다. 3) 데스크탑 환경에서 Linux는 풍부한 응용 프로그램과 효율적인 성능을 제공합니다.

데비안 하프 (Debian Hadoop)의 호환성은 어떻습니까? 데비안 하프 (Debian Hadoop)의 호환성은 어떻습니까? Apr 02, 2025 am 08:42 AM

Debianlinux는 안정성과 보안으로 유명하며 서버, 개발 및 데스크탑 환경에서 널리 사용됩니다. 현재 Debian 및 Hadoop과 직접 호환성에 대한 공식 지침이 부족하지만이 기사에서는 Debian 시스템에 Hadoop를 배포하는 방법을 안내합니다. 데비안 시스템 요구 사항 : Hadoop 구성을 시작하기 전에 Debian 시스템이 Hadoop의 최소 작동 요구 사항을 충족하는지 확인하십시오. 여기에는 필요한 JAVA 런타임 환경 (JRE) 및 Hadoop 패키지 설치가 포함됩니다. Hadoop 배포 단계 : 다운로드 및 unzip hadoop : 공식 Apachehadoop 웹 사이트에서 필요한 Hadoop 버전을 다운로드하여 해결하십시오.

See all articles